!-------------------------------------- LICENCE BEGIN ------------------------------------ !Environment Canada - Atmospheric Science and Technology License/Disclaimer, ! version 3; Last Modified: May 7, 2008. !This is free but copyrighted software; you can use/redistribute/modify it under the terms !of the Environment Canada - Atmospheric Science and Technology License/Disclaimer !version 3 or (at your option) any later version that should be found at: !http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html ! !This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; !without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. !See the above mentioned License/Disclaimer for more details. !You should have received a copy of the License/Disclaimer along with this software; !if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), !CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca !-------------------------------------- LICENCE END -------------------------------------- ***s/r bac - backsubstitution ( memory management and call to bacp_2 ) * #include "model_macros_f.h"*
subroutine bac( Itr, Itnlh ) 1,1 * implicit none * integer Itr, Itnlh * *author * Alain Patoine - Gabriel Lemay * *revision * v2_00 - Desgagne M. - initial MPI version * v2_30 - Edouard S. - adapt for vertical hybrid coordinate * v2_31 - Desgagne M. - removed treatment of Hu and Qc * v3_00 - Desgagne & Lee - Lam configuration * *object ******************************************************************************* * _____________________ * * tau | | * * q' = --- Q ; where Q = 0 , and | NONHYDROSTATIC ONLY | * * z 1 |_____________________| * * * * / \ / ~ \ * * | ~~ ~~ | gamma | ~ z dP | * * Q = Q - gamma | R' - N' | dz + & --------- | P + ----- -- | dz * * k+1 k | 3 3 | k H 2 3 | cappa dz | k * * \ /k g tau \ /k * * * ******************************************************************************* * _____________________ * * | | | * * | | NONHYDROSTATIC ONLY | * * | |_____________________| * * z | * * s | 1 * * s = ------- P | ------- | z q' | * * R T* b s | b | s s | * * d s | s * * | * * | * * / s \ | * * pi' = b | e - 1 | | * * \ / | * * | * * | * * q = ln ( z + pi' ) + q' * * | * * | * * b s | * * phi' = P - R T* ------ - R T* q' * * d z | d * * * ******************************************************************************* * * * 1 | 1 * * (R,N) = - ----- (R,N) - ----- (R,N) * * 2 cappa th | cappa 3 * * | * * | * * / ~~~~ ~~~~ \ | ~~~~ * * {1} = gamma | (z R ) - (z N ) | | ( also recognized as ZETA ) * * \ 2 2 / | * * | ~~~~~~~~~~~~~~~~~~~~~~~~~ * * | / \ * * gamma / ~ \2 dP | | z q' gamma z P | * * {2} = --------------- | z | -- + | ---- - & ------------- | * * cappa tau R T* \ / dz | | tau H 2 3 | * * d | \ cappa g tau / * * | * * | _____________________ * * / \ | | * * X = - X + 2 | {1} - {2} | | NONHYDROSTATIC ONLY | * * k+1 k \ /k |_____________________| * * * * * * / / \ \ * * | z | P - phi' | | / * * | 1 \ 1 1 / | | 0 if b = 0 * * X = d | -------------------- | with d = | 1 * * 1 T | * | T | 1 elsewhere * * \ tau R T / \ * * * * ~~ * * ( ) : vertical staggering. * * * * * ******************************************************************************* * * * 1 1 / tau \ * * w = - --- R' + ----- {$} ; where {$} = P - R T* | q' + --- X | * * g vv g tau d \ z / * * * * & _____________________ * * / \ H | | * * (mu) = - tau | R - N | + ------- {$} | NONHYDROSTATIC ONLY | * * lin \ 3 3 / 2 2 |_____________________| * * g tau * * * * * * / q' \ (q'-s) / pi' \ / \ * * (mu) = | e - 1 | + e | 1 + --- | | (mu) - q' | * * \ / \ z / \ lin / * * * ******************************************************************************* * _____________________ * * | | | * * | | NONHYDROSTATIC ONLY | * * | |_____________________| * * / cappa \ | * * T' = tau T* | R - N + ----- X | + cappa T* q' * * lin \ th th z / | * * | * * | * * | -s + q' * * | * * * * / \ / \ * * pi | /\A + /\b | | * / b s /\b s \ | * * * T'= -- | ------------- | | T' - T | --- - -------- - 1 | |-T * * z | s | | lin \ z /\A + /\b / | * * \ /\A + /\b e / \ / * * * * * * where /\A = dA/d(eta) * * /\b = db/d(eta) * ******************************************************************************* * * * / \ * * | 1 dP | * * U = tau | R" - N - --- ---- | * * | U U 2 dx | * * \ a / * * * * / \ * * | C dP | * * V = tau | R" - N - --- ---- | * * | V V 2 dy | * * \ a / * * * * . b s * * pi* = X - ---- * * tau * * * * . * * / dpi* \ /\b s * * | ---- + D | = R - N - ----------------- * * \ dpi* / cn cn tau ( /\A + /\b ) * * * * * * phi = phi' + phi* + phi * * s * * * * T = T' + T* * * * * * * F = tau R ( passive advection of humidity etc. ) * * (hu,qc,tr) (hu,qc,tr) * * * ******************************************************************************* * *arguments * Name I/O Description *---------------------------------------------------------------- * Itr I current nonlinear iteration number * Itnlh I total number of nonlinear iterations *---------------------------------------------------------------- * *implicits #include "glb_ld.cdk"
#include "lun.cdk"
#include "schm.cdk"
#include "p_geof.cdk"
#include "rhsc.cdk"
#include "nl.cdk"
#include "vt0.cdk"
#include "vtx.cdk"
#include "lctl.cdk"
* *modules integer vmmlod, vmmget, vmmuld external vmmlod, vmmget, vmmuld * integer pnerr, pnlod, pnlkey1(26),k real wijk0(LDIST_SHAPE,l_nk), wijk1(LDIST_SHAPE,l_nk) ** * __________________________________________________________________ * if (Lun_debug_L) write(Lun_out,1000) pnlkey1( 1) = VMM_KEY(st0) pnlkey1( 2) = VMM_KEY(pipt0) pnlkey1( 3) = VMM_KEY(qt0) pnlkey1( 4) = VMM_KEY(fit0) pnlkey1( 5) = VMM_KEY(fipt0) pnlkey1( 6) = VMM_KEY(topo) pnlkey1( 7) = VMM_KEY(tt0) pnlkey1( 8) = VMM_KEY(tpt0) pnlkey1( 9) = VMM_KEY(tplt0) pnlkey1(10) = VMM_KEY(ut0) pnlkey1(11) = VMM_KEY(vt0) pnlkey1(12) = VMM_KEY(psdt0) pnlkey1(13) = VMM_KEY(tdt0) pnlkey1(14) = VMM_KEY(gptx) pnlkey1(15) = VMM_KEY(gxtx) pnlkey1(16) = VMM_KEY(ru) pnlkey1(17) = VMM_KEY(rv) pnlkey1(18) = VMM_KEY(rcn) pnlkey1(19) = VMM_KEY(rth) pnlod = 19 if (.not. Schm_hydro_L) then pnlkey1(20) = VMM_KEY(qpt0) pnlkey1(21) = VMM_KEY(wt0) pnlkey1(22) = VMM_KEY(mut0) pnlkey1(23) = VMM_KEY(multx) pnlkey1(24) = VMM_KEY(rvv) pnlkey1(25) = VMM_KEY(r3) pnlkey1(26) = VMM_KEY(r3p) pnlod = 26 endif * pnerr = vmmlod(pnlkey1,pnlod) * pnerr = VMM_GET_VAR(st0) pnerr = VMM_GET_VAR(pipt0) pnerr = VMM_GET_VAR(qt0) pnerr = VMM_GET_VAR(fit0) pnerr = VMM_GET_VAR(fipt0) pnerr = VMM_GET_VAR(topo) pnerr = VMM_GET_VAR(tt0) pnerr = VMM_GET_VAR(tpt0) pnerr = VMM_GET_VAR(tplt0) pnerr = VMM_GET_VAR(ut0) pnerr = VMM_GET_VAR(vt0) pnerr = VMM_GET_VAR(psdt0) pnerr = VMM_GET_VAR(tdt0) pnerr = VMM_GET_VAR(gptx) pnerr = VMM_GET_VAR(gxtx) pnerr = VMM_GET_VAR(ru) pnerr = VMM_GET_VAR(rv) pnerr = VMM_GET_VAR(rcn) pnerr = VMM_GET_VAR(rth) if (.not. Schm_hydro_L) then pnerr = VMM_GET_VAR(qpt0) pnerr = VMM_GET_VAR(wt0) pnerr = VMM_GET_VAR(mut0) pnerr = VMM_GET_VAR(multx) pnerr = VMM_GET_VAR(rvv) pnerr = VMM_GET_VAR(r3) pnerr = VMM_GET_VAR(r3p) else qpt0_ = 0 wt0_ = 0 mut0_ = 0 multx_= 0 rvv_ = 0 r3_ = 0 r3p_ = 0 endif * c if (Acid_test_L) then topo,gptx,nl_ntrh,rth c call glbstat (st0, 'ST0',LDIST_DIM,1,8+acid_i0,G_ni-7-acid_in, c % 8+acid_j0,G_nj-7-acid_jn,1,1) c endif call bacp_2
( Itr, Itnlh, st0, pipt0, qt0, % fit0, fipt0, topo, tt0, tpt0, tplt0, % ut0, vt0, psdt0, tdt0, % qpt0, wt0, mut0, multx, gptx, gxtx, % ru, rv, rth, r3, r3p, rvv, rcn, % nl_nu, nl_nv, nl_nth, nl_n3, nl_n3p, $ nl_ncn,wijk0,wijk1,LDIST_DIM, l_nk ) * c if (Acid_test_L) then pipt0,qt0,gxtx,psdt0,tdt0,tplt0 c if (Lun_out.gt.0) write(Lun_out,*) 'after bacp_2' c call glbstat (st0,'ST0',LDIST_DIM,1,8+acid_i0,G_ni-7-acid_in, c % 8+acid_j0,G_nj-7-acid_jn,1,1) pnerr = vmmuld(-1,0) 1000 format (5X,'BACK SUBSTITUTION: (S/R BAC)') * __________________________________________________________________ * return end