!-------------------------------------- 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 adw_tricub_tl - TLM of adw_tricub * #include "model_macros_f.h"*
subroutine adw_tricub_tl ( F_out, F_in, F_inzz, F_n, 1 % F_capx, F_xgg, F_xdd, % F_capy, F_ygg, F_ydd, % F_capz, F_cz, % F_outm, F_inm, F_inzzm,F_nm, % F_capxm,F_xggm,F_xddm, % F_capym,F_yggm,F_yddm, % F_capzm,F_czm, F_num, F_mono_L,i0,in,j0,jn,kn ) * implicit none * logical F_mono_L * integer F_num, F_n(F_num),i0,in,j0,jn,kn * real F_in(*), F_inzz(*) * real F_out (F_num), % F_capx(F_num), F_capy(F_num), F_capz(F_num), F_cz (F_num), % F_xgg (F_num), F_xdd (F_num), F_ygg (F_num), F_ydd (F_num) * integer F_nm(F_num) * real F_inm(*), F_inzzm(*) * real F_outm (F_num), % F_capxm(F_num), F_capym(F_num), F_capzm(F_num), F_czm (F_num), % F_xggm (F_num), F_xddm (F_num), F_yggm (F_num), F_yddm (F_num) * *author * monique tanguay * *revision * v2_31 - Tanguay M. - initial MPI version * v3_00 - Tanguay M. - adapt to restructured adw_main * v3_02 - Tanguay M. - restore tracers monotone if V4dg_conf.ne.0 * v3_11 - Tanguay M. - AIXport+Opti+OpenMP for TLM-ADJ * *language * fortran 77 * *object * see id section * *arguments *______________________________________________________________________ * | | | * NAME | DESCRIPTION | I/O | *--------------|-------------------------------------------------|-----| * | | | * F_out | result of interpolation | o | * F_in | field to interpolate | i | * F_inzz | precomputed 2nd vertical derivatives | i | * | | | * F_n | positions in the 3D volume of interpolation | i | * | boxes | | * | | | * F_capx | \ | i | * F_xgg | precomputed displacements and interpolation | i | * F_xdd | / terms along the x-direction | i | * | | | * F_capy | \ | i | * F_ygg | precomputed displacements and interpolation | i | * F_ydd | / terms along the y-direction | i | * | | | * F_capz | \ precomputed displacements and interpolation | i | * F_cz | / terms along the z-direction | i | * | | | * F_num | number of points to interpolate | i | * | | | * F_mono_L | switch: .true. : monotonic interpolation | i | *______________|_________________________________________________|_____| * *implicits #include "glb_ld.cdk"
#include "adw.cdk"
************************************************************************ integer n, nijag,i,j,k,nij * real prmin, prmax, prmin0, prmax0, % prmin1, prmax1, prmin2, prmax2, work * integer o1, o2, o3, o4 real*8 xx_8, xm_8 real*8 p1_8, p2_8, p3_8, p4_8 real*8 t1_8, t2_8 * real*8 a1_x_8, a2_x_8, a3_x_8, a4_x_8 real*8 b1_x_8, b2_x_8, b3_x_8, b4_x_8 real*8 c1_x_8, c2_x_8, c3_x_8, c4_x_8 real*8 d1_x_8, d2_x_8, d3_x_8, d4_x_8 * real*8 a1_y_8, b1_y_8, c1_y_8, d1_y_8 * real*8 p20_8, p30_8, p31_8 * real prminm, prmaxm, prmin0m, prmax0m, % prmin1m, prmax1m, prmin2m, prmax2m, work_m * real*8 ggm_8, ddm_8, xxm_8, xmm_8 real*8 p1m_8, p2m_8, p3m_8, p4m_8 real*8 t1m_8, t2m_8, t3m_8 * real*8 p10m_8, p20m_8, p30m_8, p40m_8 real*8 p11m_8, p31m_8 real*8 t10m_8, t20m_8 * real*8 a1m_x_8, a2m_8, a3m_8, a4m_8 real*8 b1m_x_8, b2m_8, b3m_8, b4m_8 real*8 c1m_x_8, c2m_8, c3m_8, c4m_8 real*8 d1m_x_8, d2m_8, d3m_8, d4m_8 * real*8 a1m_y_8, b1m_y_8, c1m_y_8, d1m_y_8 * ______________________________________________________ * nij = l_ni*l_nj nijag = Adw_nit * Adw_njt * !$omp parallel private(n,o1,o2,o3,o4, !$omp& xxm_8,xmm_8,ggm_8,ddm_8,work_m, !$omp& t1m_8,t2m_8,t3m_8,t10m_8,t20m_8, !$omp& p1m_8,p2m_8,p3m_8,p4m_8, !$omp& p10m_8,p11m_8,p20m_8,p30m_8,p31m_8,p40m_8, !$omp& prmax0m,prmin0m,prmax1m,prmin1m, !$omp& prmax2m,prmin2m,prmaxm, prminm, !$omp& a1m_x_8,a1m_y_8,a2m_8,a3m_8,a4m_8, !$omp& b1m_x_8,b1m_y_8,b2m_8,b3m_8,b4m_8, !$omp& c1m_x_8,c1m_y_8,c2m_8,c3m_8,c4m_8, !$omp& d1m_x_8,d1m_y_8,d2m_8,d3m_8,d4m_8, !$omp& xx_8,xm_8,work,t1_8,t2_8, !$omp& p1_8,p2_8,p3_8,p4_8,p20_8,p30_8,p31_8, !$omp& prmax0,prmin0,prmax1,prmin1, !$omp& prmax2,prmin2,prmax, prmin, !$omp& a1_x_8,a2_x_8,a3_x_8,a4_x_8, !$omp& a1_y_8,b1_y_8,c1_y_8,d1_y_8, !$omp& b1_x_8,b2_x_8,b3_x_8,b4_x_8, !$omp& c1_x_8,c2_x_8,c3_x_8,c4_x_8, !$omp& d1_x_8,d2_x_8,d3_x_8,d4_x_8) * if ( F_mono_L ) then * !$omp do do 100 k=1,kn do 90 j=j0,jn do 80 i=i0,in n = (k-1)*nij + ((j-1)*l_ni) + i * *********************************************************************** * x interpolation *********************************************************************** * * TRAJECTORY * ---------- xxm_8 = F_capxm(n) xmm_8 = 1 - xxm_8 * * TLM * --- xx_8 = F_capx(n) xm_8 = - xx_8 * * TRAJ (constant) * --------------- ggm_8 = F_xggm(n) ddm_8 = F_xddm(n) * * TRAJ (constant) * --------------- t10m_8 = 1 + ggm_8 t20m_8 = 1 + ddm_8 p10m_8 = ggm_8 + t20m_8 p40m_8 = ddm_8 * t20m_8 * p10m_8 * p11m_8 = ggm_8 * t10m_8 * p10m_8 t3m_8 = ggm_8 * t20m_8 t1m_8 = t10m_8 * ddm_8 * * TRAJECTORY * ---------- p20m_8 = t20m_8 - xxm_8 p30m_8 = ggm_8 + xxm_8 * t2m_8 =-xxm_8 * xmm_8 p4m_8 = t2m_8 * p30m_8 / p40m_8 * p1m_8 = t2m_8 * p20m_8 / p11m_8 * p31m_8 = p20m_8 * p30m_8 * p2m_8 = xmm_8 * p31m_8 / t3m_8 * p3m_8 = xxm_8 * p31m_8 / t1m_8 * * TLM * --- p20_8 = -xx_8 p30_8 = xx_8 * t2_8 = -xx_8 * xmm_8 - xxm_8 * xm_8 p4_8 = t2_8 * p30m_8 / p40m_8 + t2m_8 * p30_8 / p40m_8 * p1_8 = t2_8 * p20m_8 / p11m_8 + t2m_8 * p20_8 / p11m_8 * p31_8 = p20_8 * p30m_8 + p20m_8 * p30_8 * p2_8 = xm_8 * p31m_8 / t3m_8 + xmm_8 * p31_8 / t3m_8 * p3_8 = xx_8 * p31m_8 / t1m_8 + xxm_8 * p31_8 / t1m_8 * * TRAJECTORY * ---------- o1 = F_nm(n)-Adw_nit o2 = F_nm(n) o3 = F_nm(n)+Adw_nit o4 = F_nm(n)+Adw_nit+Adw_nit * * TRAJECTORY * ---------- a1m_x_8 = p1m_8 * F_inm(o1-1) + p2m_8 * F_inm(o1) + p3m_8 * F_inm(o1+1) + p4m_8 * F_inm(o1+2) * a2m_8 = p1m_8 * F_inm(o2-1) + p2m_8 * F_inm(o2) + p3m_8 * F_inm(o2+1) + p4m_8 * F_inm(o2+2) * a3m_8 = p1m_8 * F_inm(o3-1) + p2m_8 * F_inm(o3) + p3m_8 * F_inm(o3+1) + p4m_8 * F_inm(o3+2) a4m_8 = p1m_8 * F_inm(o4-1) + p2m_8 * F_inm(o4) + p3m_8 * F_inm(o4+1) + p4m_8 * F_inm(o4+2) * * TLM * --- a1_x_8 = p1_8 * F_inm(o1-1) + p2_8 * F_inm(o1) + p3_8 * F_inm(o1+1) + p4_8 * F_inm(o1+2) + % p1m_8 * F_in (o1-1) + p2m_8 * F_in (o1) + p3m_8 * F_in (o1+1) + p4m_8 * F_in (o1+2) * * TRAJECTORY and TLM * ------------------ * The following max statement is expanded as one IF block * prmax0m = max(F_inm(o2),F_inm(o2+1)) prmax0m = F_inm(o2) prmax0 = F_in (o2) if(F_inm(o2+1).gt.F_inm(o2)) then prmax0m = F_inm(o2+1) prmax0 = F_in (o2+1) endif * * The following min statement is expanded as one IF block * prmin0m = min(F_inm(o2),F_inm(o2+1)) prmin0m = F_inm(o2) prmin0 = F_in (o2) if(F_inm(o2+1).lt.F_inm(o2)) then prmin0m = F_inm(o2+1) prmin0 = F_in (o2+1) endif * a2_x_8 = p1_8 * F_inm(o2-1) + p2_8 * F_inm(o2) + p3_8 * F_inm(o2+1) + p4_8 * F_inm(o2+2) + % p1m_8 * F_in (o2-1) + p2m_8 * F_in (o2) + p3m_8 * F_in (o2+1) + p4m_8 * F_in (o2+2) * * TRAJECTORY and TLM * ------------------ * The following max statement is expanded as two IF block * prmax1m = max(prmax0m,F_inm(o3),F_inm(o3+1)) work_m = F_inm(o3) work = F_in (o3) if(F_inm(o3+1).gt.F_inm(o3)) then work_m = F_inm(o3+1) work = F_in (o3+1) endif if(prmax0m.gt.work_m) then prmax1m = prmax0m prmax1 = prmax0 else prmax1m = work_m prmax1 = work endif * * The following min statement is expanded as two IF block * prmin1m = min(prmin0m,F_inm(o3),F_inm(o3+1)) work_m = F_inm(o3) work = F_in (o3) if(F_inm(o3+1).lt.F_inm(o3)) then work_m = F_inm(o3+1) work = F_in (o3+1) endif if(prmin0m.lt.work_m) then prmin1m = prmin0m prmin1 = prmin0 else prmin1m = work_m prmin1 = work endif * a3_x_8 = p1_8 * F_inm(o3-1) + p2_8 * F_inm(o3) + p3_8 * F_inm(o3+1) + p4_8 * F_inm(o3+2) + % p1m_8 * F_in (o3-1) + p2m_8 * F_in (o3) + p3m_8 * F_in (o3+1) + p4m_8 * F_in (o3+2) a4_x_8 = p1_8 * F_inm(o4-1) + p2_8 * F_inm(o4) + p3_8 * F_inm(o4+1) + p4_8 * F_inm(o4+2) + % p1m_8 * F_in (o4-1) + p2m_8 * F_in (o4) + p3m_8 * F_in (o4+1) + p4m_8 * F_in (o4+2) * * TRAJECTORY * ---------- b1m_x_8 = p1m_8 * F_inzzm(o1-1) + p2m_8 * F_inzzm(o1) + p3m_8 * F_inzzm(o1+1) + p4m_8 * F_inzzm(o1+2) b2m_8 = p1m_8 * F_inzzm(o2-1) + p2m_8 * F_inzzm(o2) + p3m_8 * F_inzzm(o2+1) + p4m_8 * F_inzzm(o2+2) b3m_8 = p1m_8 * F_inzzm(o3-1) + p2m_8 * F_inzzm(o3) + p3m_8 * F_inzzm(o3+1) + p4m_8 * F_inzzm(o3+2) b4m_8 = p1m_8 * F_inzzm(o4-1) + p2m_8 * F_inzzm(o4) + p3m_8 * F_inzzm(o4+1) + p4m_8 * F_inzzm(o4+2) * * TLM * --- b1_x_8 = p1_8 * F_inzzm(o1-1) + p2_8 * F_inzzm(o1) + p3_8 * F_inzzm(o1+1) + p4_8 * F_inzzm(o1+2) + % p1m_8 * F_inzz (o1-1) + p2m_8 * F_inzz (o1) + p3m_8 * F_inzz (o1+1) + p4m_8 * F_inzz (o1+2) b2_x_8 = p1_8 * F_inzzm(o2-1) + p2_8 * F_inzzm(o2) + p3_8 * F_inzzm(o2+1) + p4_8 * F_inzzm(o2+2) + % p1m_8 * F_inzz (o2-1) + p2m_8 * F_inzz (o2) + p3m_8 * F_inzz (o2+1) + p4m_8 * F_inzz (o2+2) b3_x_8 = p1_8 * F_inzzm(o3-1) + p2_8 * F_inzzm(o3) + p3_8 * F_inzzm(o3+1) + p4_8 * F_inzzm(o3+2) + % p1m_8 * F_inzz (o3-1) + p2m_8 * F_inzz (o3) + p3m_8 * F_inzz (o3+1) + p4m_8 * F_inzz (o3+2) b4_x_8 = p1_8 * F_inzzm(o4-1) + p2_8 * F_inzzm(o4) + p3_8 * F_inzzm(o4+1) + p4_8 * F_inzzm(o4+2) + & p1m_8 * F_inzz (o4-1) + p2m_8 * F_inzz (o4) + p3m_8 * F_inzz (o4+1) + p4m_8 * F_inzz (o4+2) * * TRAJECTORY * ---------- o1 = o1 + nijag o2 = o2 + nijag o3 = o3 + nijag o4 = o4 + nijag * * TRAJECTORY * ---------- c1m_x_8 = p1m_8 * F_inm(o1-1) + p2m_8 * F_inm(o1) + p3m_8 * F_inm(o1+1) + p4m_8 * F_inm(o1+2) * c2m_8 = p1m_8 * F_inm(o2-1) + p2m_8 * F_inm(o2) + p3m_8 * F_inm(o2+1) + p4m_8 * F_inm(o2+2) * c3m_8 = p1m_8 * F_inm(o3-1) + p2m_8 * F_inm(o3) + p3m_8 * F_inm(o3+1) + p4m_8 * F_inm(o3+2) c4m_8 = p1m_8 * F_inm(o4-1) + p2m_8 * F_inm(o4) + p3m_8 * F_inm(o4+1) + p4m_8 * F_inm(o4+2) * * TLM * --- c1_x_8 = p1_8 * F_inm(o1-1) + p2_8 * F_inm(o1) + p3_8 * F_inm(o1+1) + p4_8 * F_inm(o1+2) + % p1m_8 * F_in (o1-1) + p2m_8 * F_in (o1) + p3m_8 * F_in (o1+1) + p4m_8 * F_in (o1+2) * * TRAJECTORY and TLM * ------------------ * The following max statement is expanded as two IF block * prmax2m = max(prmax1m,F_inm(o2),F_inm(o2+1)) work_m = F_inm(o2) work = F_in (o2) if(F_inm(o2+1).gt.F_inm(o2)) then work_m = F_inm(o2+1) work = F_in (o2+1) endif if(prmax1m.gt.work_m) then prmax2m = prmax1m prmax2 = prmax1 else prmax2m = work_m prmax2 = work endif * * The following min statement is expanded as two IF block * prmin2m = min(prmin1m,F_inm(o2),F_inm(o2+1)) work_m = F_inm(o2) work = F_in (o2) if(F_inm(o2+1).lt.F_inm(o2)) then work_m = F_inm(o2+1) work = F_in (o2+1) endif if(prmin1m.lt.work_m) then prmin2m = prmin1m prmin2 = prmin1 else prmin2m = work_m prmin2 = work endif * c2_x_8 = p1_8 * F_inm(o2-1) + p2_8 * F_inm(o2) + p3_8 * F_inm(o2+1) + p4_8 * F_inm(o2+2) + % p1m_8 * F_in (o2-1) + p2m_8 * F_in (o2) + p3m_8 * F_in (o2+1) + p4m_8 * F_in (o2+2) * * TRAJECTORY and TLM * ------------------ * The following max statement is expanded as two IF block * prmaxm = max(prmax2m,F_inm(o3),F_inm(o3+1)) work_m = F_inm(o3) work = F_in (o3) if(F_inm(o3+1).gt.F_inm(o3)) then work_m = F_inm(o3+1) work = F_in (o3+1) endif if(prmax2m.gt.work_m) then prmaxm = prmax2m prmax = prmax2 else prmaxm = work_m prmax = work endif * * The following min statement is expanded as two IF block * prminm = min(prmin2m,F_inm(o3),F_inm(o3+1)) work_m = F_inm(o3) work = F_in (o3) if(F_inm(o3+1).lt.F_inm(o3)) then work_m = F_inm(o3+1) work = F_in (o3+1) endif if(prmin2m.lt.work_m) then prminm = prmin2m prmin = prmin2 else prminm = work_m prmin = work endif * c3_x_8 = p1_8 * F_inm(o3-1) + p2_8 * F_inm(o3) + p3_8 * F_inm(o3+1) + p4_8 * F_inm(o3+2) + % p1m_8 * F_in (o3-1) + p2m_8 * F_in (o3) + p3m_8 * F_in (o3+1) + p4m_8 * F_in (o3+2) c4_x_8 = p1_8 * F_inm(o4-1) + p2_8 * F_inm(o4) + p3_8 * F_inm(o4+1) + p4_8 * F_inm(o4+2) + % p1m_8 * F_in (o4-1) + p2m_8 * F_in (o4) + p3m_8 * F_in (o4+1) + p4m_8 * F_in (o4+2) * * TRAJECTORY * ---------- d1m_x_8 = p1m_8 * F_inzzm(o1-1) + p2m_8 * F_inzzm(o1) + p3m_8 * F_inzzm(o1+1) + p4m_8 * F_inzzm(o1+2) d2m_8 = p1m_8 * F_inzzm(o2-1) + p2m_8 * F_inzzm(o2) + p3m_8 * F_inzzm(o2+1) + p4m_8 * F_inzzm(o2+2) d3m_8 = p1m_8 * F_inzzm(o3-1) + p2m_8 * F_inzzm(o3) + p3m_8 * F_inzzm(o3+1) + p4m_8 * F_inzzm(o3+2) d4m_8 = p1m_8 * F_inzzm(o4-1) + p2m_8 * F_inzzm(o4) + p3m_8 * F_inzzm(o4+1) + p4m_8 * F_inzzm(o4+2) * * TLM * --- d1_x_8 = p1_8 * F_inzzm(o1-1) + p2_8 * F_inzzm(o1) + p3_8 * F_inzzm(o1+1) + p4_8 * F_inzzm(o1+2) + % p1m_8 * F_inzz (o1-1) + p2m_8 * F_inzz (o1) + p3m_8 * F_inzz (o1+1) + p4m_8 * F_inzz (o1+2) d2_x_8 = p1_8 * F_inzzm(o2-1) + p2_8 * F_inzzm(o2) + p3_8 * F_inzzm(o2+1) + p4_8 * F_inzzm(o2+2) + % p1m_8 * F_inzz (o2-1) + p2m_8 * F_inzz (o2) + p3m_8 * F_inzz (o2+1) + p4m_8 * F_inzz (o2+2) d3_x_8 = p1_8 * F_inzzm(o3-1) + p2_8 * F_inzzm(o3) + p3_8 * F_inzzm(o3+1) + p4_8 * F_inzzm(o3+2) + % p1m_8 * F_inzz (o3-1) + p2m_8 * F_inzz (o3) + p3m_8 * F_inzz (o3+1) + p4m_8 * F_inzz (o3+2) d4_x_8 = p1_8 * F_inzzm(o4-1) + p2_8 * F_inzzm(o4) + p3_8 * F_inzzm(o4+1) + p4_8 * F_inzzm(o4+2) + % p1m_8 * F_inzz (o4-1) + p2m_8 * F_inzz (o4) + p3m_8 * F_inzz (o4+1) + p4m_8 * F_inzz (o4+2) * *********************************************************************** * y interpolation *********************************************************************** * * TRAJECTORY * ---------- xxm_8 = F_capym(n) xmm_8 = 1 - xxm_8 * * TLM * --- xx_8 = F_capy(n) xm_8 = - xx_8 * * TRAJ (constant) * --------------- ggm_8 = F_yggm(n) ddm_8 = F_yddm(n) * * TRAJ (constant) * --------------- t10m_8 = 1 + ggm_8 t20m_8 = 1 + ddm_8 p10m_8 = ggm_8 + t20m_8 p40m_8 = ddm_8 * t20m_8 * p10m_8 * p11m_8 = ggm_8 * t10m_8 * p10m_8 t3m_8 = ggm_8 * t20m_8 t1m_8 = t10m_8 * ddm_8 * * TRAJECTORY * ---------- p20m_8 = t20m_8 - xxm_8 p30m_8 = ggm_8 + xxm_8 * t2m_8 =-xxm_8 * xmm_8 p4m_8 = t2m_8 * p30m_8 / p40m_8 * p1m_8 = t2m_8 * p20m_8 / p11m_8 * p31m_8 = p20m_8 * p30m_8 * p2m_8 = xmm_8 * p31m_8 / t3m_8 * p3m_8 = xxm_8 * p31m_8 / t1m_8 * * TLM * --- p20_8 = - xx_8 p30_8 = xx_8 * t2_8 = - xx_8 * xmm_8 - xxm_8 * xm_8 p4_8 = t2_8 * p30m_8 / p40m_8 + t2m_8 * p30_8 / p40m_8 * p1_8 = t2_8 * p20m_8 / p11m_8 + t2m_8 * p20_8 / p11m_8 * p31_8 = p20_8 * p30m_8 + p20m_8 * p30_8 * p2_8 = xm_8 * p31m_8 / t3m_8 + xmm_8 * p31_8 / t3m_8 * p3_8 = xx_8 * p31m_8 / t1m_8 + xxm_8 * p31_8 / t1m_8 * * TRAJECTORY * ---------- a1m_y_8 = p1m_8 * a1m_x_8 + p2m_8 * a2m_8 + p3m_8 * a3m_8 + p4m_8 * a4m_8 b1m_y_8 = p1m_8 * b1m_x_8 + p2m_8 * b2m_8 + p3m_8 * b3m_8 + p4m_8 * b4m_8 c1m_y_8 = p1m_8 * c1m_x_8 + p2m_8 * c2m_8 + p3m_8 * c3m_8 + p4m_8 * c4m_8 d1m_y_8 = p1m_8 * d1m_x_8 + p2m_8 * d2m_8 + p3m_8 * d3m_8 + p4m_8 * d4m_8 * * TLM * --- a1_y_8 = p1_8 * a1m_x_8 + p2_8 * a2m_8 + p3_8 * a3m_8 + p4_8 * a4m_8 % +p1m_8 * a1_x_8 + p2m_8 * a2_x_8 + p3m_8 * a3_x_8 + p4m_8 * a4_x_8 b1_y_8 = p1_8 * b1m_x_8 + p2_8 * b2m_8 + p3_8 * b3m_8 + p4_8 * b4m_8 % +p1m_8 * b1_x_8 + p2m_8 * b2_x_8 + p3m_8 * b3_x_8 + p4m_8 * b4_x_8 c1_y_8 = p1_8 * c1m_x_8 + p2_8 * c2m_8 + p3_8 * c3m_8 + p4_8 * c4m_8 % +p1m_8 * c1_x_8 + p2m_8 * c2_x_8 + p3m_8 * c3_x_8 + p4m_8 * c4_x_8 d1_y_8 = p1_8 * d1m_x_8 + p2_8 * d2m_8 + p3_8 * d3m_8 + p4_8 * d4m_8 % +p1m_8 * d1_x_8 + p2m_8 * d2_x_8 + p3m_8 * d3_x_8 + p4m_8 * d4_x_8 * *********************************************************************** * z interpolation *********************************************************************** * * TRAJECTORY * ---------- xxm_8 = F_capzm(n) xmm_8 = 1.0 - xxm_8 t1m_8 = F_czm(n) * ( xmm_8 + 1.0 ) t2m_8 = F_czm(n) * ( xxm_8 + 1.0 ) * * TLM * --- xx_8 = F_capz(n) xm_8 = - xx_8 t1_8 = F_cz(n) * ( xmm_8 + 1.0 ) + F_czm(n) * ( xm_8 ) t2_8 = F_cz(n) * ( xxm_8 + 1.0 ) + F_czm(n) * ( xx_8 ) * * TRAJECTORY * ---------- F_outm(n)= xmm_8 * a1m_y_8 + t1m_8 * b1m_y_8 + xxm_8 * c1m_y_8 + t2m_8 * d1m_y_8 * * TLM * --- F_out(n) = xm_8 * a1m_y_8 + t1_8 * b1m_y_8 + xx_8 * c1m_y_8 + t2_8 * d1m_y_8 % +xmm_8 * a1_y_8 + t1m_8 * b1_y_8 + xxm_8 * c1_y_8 + t2m_8 * d1_y_8 * * The following min - max statement is expanded as two IF blocks * F_out(n) = max ( 1.0d0*prmin , ( min ( 1.0d0*prmax, xm * a1 + t1 * b1 + xx * c1 + t2 * d1 ))) * * TRAJECTORY and TLM * ------------------ if(prmaxm.lt.F_outm(n)) then F_outm(n) = prmaxm F_out (n) = prmax endif if(prminm.gt.F_outm(n)) then F_outm(n) = prminm F_out (n) = prmin endif * 80 continue 90 continue 100 continue !$omp enddo * *********************************************************************** *********************************************************************** else *********************************************************************** *********************************************************************** * !$omp do do 200 k=1,kn do 190 j=j0,jn do 180 i=i0,in * n = (k-1)*nij + ((j-1)*l_ni) + i * *********************************************************************** * x interpolation *********************************************************************** * * TRAJECTORY * ---------- xxm_8 = F_capxm(n) xmm_8 = 1 - xxm_8 * * TLM * --- xx_8 = F_capx(n) xm_8 = - xx_8 * * TRAJ (constant) * --------------- ggm_8 = F_xggm(n) ddm_8 = F_xddm(n) * * TRAJ (constant) * --------------- t10m_8 = 1 + ggm_8 t20m_8 = 1 + ddm_8 p10m_8 = ggm_8 + t20m_8 p40m_8 = ddm_8 * t20m_8 * p10m_8 * p11m_8 = ggm_8 * t10m_8 * p10m_8 t3m_8 = ggm_8 * t20m_8 t1m_8 = t10m_8 * ddm_8 * * TRAJECTORY * ---------- p20m_8 = t20m_8 - xxm_8 p30m_8 = ggm_8 + xxm_8 * t2m_8 =-xxm_8 * xmm_8 p4m_8 = t2m_8 * p30m_8 / p40m_8 * p1m_8 = t2m_8 * p20m_8 / p11m_8 * p31m_8 = p20m_8 * p30m_8 * p2m_8 = xmm_8 * p31m_8 / t3m_8 * p3m_8 = xxm_8 * p31m_8 / t1m_8 * * TLM * --- p20_8 = -xx_8 p30_8 = xx_8 * t2_8 = -xx_8 * xmm_8 - xxm_8 * xm_8 p4_8 = t2_8 * p30m_8 / p40m_8 + t2m_8 * p30_8 / p40m_8 * p1_8 = t2_8 * p20m_8 / p11m_8 + t2m_8 * p20_8 / p11m_8 * p31_8 = p20_8 * p30m_8 + p20m_8 * p30_8 * p2_8 = xm_8 * p31m_8 / t3m_8 + xmm_8 * p31_8 / t3m_8 * p3_8 = xx_8 * p31m_8 / t1m_8 + xxm_8 * p31_8 / t1m_8 * * TRAJECTORY * ---------- o1 = F_nm(n)-Adw_nit o2 = F_nm(n) o3 = F_nm(n)+Adw_nit o4 = F_nm(n)+Adw_nit+Adw_nit * * TRAJECTORY * ---------- a1m_x_8 = p1m_8 * F_inm(o1-1) + p2m_8 * F_inm(o1) + p3m_8 * F_inm(o1+1) + p4m_8 * F_inm(o1+2) a2m_8 = p1m_8 * F_inm(o2-1) + p2m_8 * F_inm(o2) + p3m_8 * F_inm(o2+1) + p4m_8 * F_inm(o2+2) a3m_8 = p1m_8 * F_inm(o3-1) + p2m_8 * F_inm(o3) + p3m_8 * F_inm(o3+1) + p4m_8 * F_inm(o3+2) a4m_8 = p1m_8 * F_inm(o4-1) + p2m_8 * F_inm(o4) + p3m_8 * F_inm(o4+1) + p4m_8 * F_inm(o4+2) * * TLM * --- a1_x_8 = p1_8 * F_inm(o1-1) + p2_8 * F_inm(o1) + p3_8 * F_inm(o1+1) + p4_8 * F_inm(o1+2) + % p1m_8 * F_in (o1-1) + p2m_8 * F_in (o1) + p3m_8 * F_in (o1+1) + p4m_8 * F_in (o1+2) a2_x_8 = p1_8 * F_inm(o2-1) + p2_8 * F_inm(o2) + p3_8 * F_inm(o2+1) + p4_8 * F_inm(o2+2) + % p1m_8 * F_in (o2-1) + p2m_8 * F_in (o2) + p3m_8 * F_in (o2+1) + p4m_8 * F_in (o2+2) a3_x_8 = p1_8 * F_inm(o3-1) + p2_8 * F_inm(o3) + p3_8 * F_inm(o3+1) + p4_8 * F_inm(o3+2) + % p1m_8 * F_in (o3-1) + p2m_8 * F_in (o3) + p3m_8 * F_in (o3+1) + p4m_8 * F_in (o3+2) a4_x_8 = p1_8 * F_inm(o4-1) + p2_8 * F_inm(o4) + p3_8 * F_inm(o4+1) + p4_8 * F_inm(o4+2) + % p1m_8 * F_in (o4-1) + p2m_8 * F_in (o4) + p3m_8 * F_in (o4+1) + p4m_8 * F_in (o4+2) * * TRAJECTORY * ---------- b1m_x_8 = p1m_8 * F_inzzm(o1-1) + p2m_8 * F_inzzm(o1) + p3m_8 * F_inzzm(o1+1) + p4m_8 * F_inzzm(o1+2) b2m_8 = p1m_8 * F_inzzm(o2-1) + p2m_8 * F_inzzm(o2) + p3m_8 * F_inzzm(o2+1) + p4m_8 * F_inzzm(o2+2) b3m_8 = p1m_8 * F_inzzm(o3-1) + p2m_8 * F_inzzm(o3) + p3m_8 * F_inzzm(o3+1) + p4m_8 * F_inzzm(o3+2) b4m_8 = p1m_8 * F_inzzm(o4-1) + p2m_8 * F_inzzm(o4) + p3m_8 * F_inzzm(o4+1) + p4m_8 * F_inzzm(o4+2) * * TLM * --- b1_x_8 = p1_8 * F_inzzm(o1-1) + p2_8 * F_inzzm(o1) + p3_8 * F_inzzm(o1+1) + p4_8 * F_inzzm(o1+2) + % p1m_8 * F_inzz (o1-1) + p2m_8 * F_inzz (o1) + p3m_8 * F_inzz (o1+1) + p4m_8 * F_inzz (o1+2) b2_x_8 = p1_8 * F_inzzm(o2-1) + p2_8 * F_inzzm(o2) + p3_8 * F_inzzm(o2+1) + p4_8 * F_inzzm(o2+2) + % p1m_8 * F_inzz (o2-1) + p2m_8 * F_inzz (o2) + p3m_8 * F_inzz (o2+1) + p4m_8 * F_inzz (o2+2) b3_x_8 = p1_8 * F_inzzm(o3-1) + p2_8 * F_inzzm(o3) + p3_8 * F_inzzm(o3+1) + p4_8 * F_inzzm(o3+2) + % p1m_8 * F_inzz (o3-1) + p2m_8 * F_inzz (o3) + p3m_8 * F_inzz (o3+1) + p4m_8 * F_inzz (o3+2) b4_x_8 = p1_8 * F_inzzm(o4-1) + p2_8 * F_inzzm(o4) + p3_8 * F_inzzm(o4+1) + p4_8 * F_inzzm(o4+2) + & p1m_8 * F_inzz (o4-1) + p2m_8 * F_inzz (o4) + p3m_8 * F_inzz (o4+1) + p4m_8 * F_inzz (o4+2) * * TRAJECTORY * ---------- o1 = o1 + nijag o2 = o2 + nijag o3 = o3 + nijag o4 = o4 + nijag * * TRAJECTORY * ---------- c1m_x_8 = p1m_8 * F_inm(o1-1) + p2m_8 * F_inm(o1) + p3m_8 * F_inm(o1+1) + p4m_8 * F_inm(o1+2) c2m_8 = p1m_8 * F_inm(o2-1) + p2m_8 * F_inm(o2) + p3m_8 * F_inm(o2+1) + p4m_8 * F_inm(o2+2) c3m_8 = p1m_8 * F_inm(o3-1) + p2m_8 * F_inm(o3) + p3m_8 * F_inm(o3+1) + p4m_8 * F_inm(o3+2) c4m_8 = p1m_8 * F_inm(o4-1) + p2m_8 * F_inm(o4) + p3m_8 * F_inm(o4+1) + p4m_8 * F_inm(o4+2) * * TLM * --- c1_x_8 = p1_8 * F_inm(o1-1) + p2_8 * F_inm(o1) + p3_8 * F_inm(o1+1) + p4_8 * F_inm(o1+2) + % p1m_8 * F_in (o1-1) + p2m_8 * F_in (o1) + p3m_8 * F_in (o1+1) + p4m_8 * F_in (o1+2) c2_x_8 = p1_8 * F_inm(o2-1) + p2_8 * F_inm(o2) + p3_8 * F_inm(o2+1) + p4_8 * F_inm(o2+2) + % p1m_8 * F_in (o2-1) + p2m_8 * F_in (o2) + p3m_8 * F_in (o2+1) + p4m_8 * F_in (o2+2) c3_x_8 = p1_8 * F_inm(o3-1) + p2_8 * F_inm(o3) + p3_8 * F_inm(o3+1) + p4_8 * F_inm(o3+2) + % p1m_8 * F_in (o3-1) + p2m_8 * F_in (o3) + p3m_8 * F_in (o3+1) + p4m_8 * F_in (o3+2) c4_x_8 = p1_8 * F_inm(o4-1) + p2_8 * F_inm(o4) + p3_8 * F_inm(o4+1) + p4_8 * F_inm(o4+2) + % p1m_8 * F_in (o4-1) + p2m_8 * F_in (o4) + p3m_8 * F_in (o4+1) + p4m_8 * F_in (o4+2) * * TRAJECTORY * ---------- d1m_x_8 = p1m_8 * F_inzzm(o1-1) + p2m_8 * F_inzzm(o1) + p3m_8 * F_inzzm(o1+1) + p4m_8 * F_inzzm(o1+2) d2m_8 = p1m_8 * F_inzzm(o2-1) + p2m_8 * F_inzzm(o2) + p3m_8 * F_inzzm(o2+1) + p4m_8 * F_inzzm(o2+2) d3m_8 = p1m_8 * F_inzzm(o3-1) + p2m_8 * F_inzzm(o3) + p3m_8 * F_inzzm(o3+1) + p4m_8 * F_inzzm(o3+2) d4m_8 = p1m_8 * F_inzzm(o4-1) + p2m_8 * F_inzzm(o4) + p3m_8 * F_inzzm(o4+1) + p4m_8 * F_inzzm(o4+2) * * TLM * --- d1_x_8 = p1_8 * F_inzzm(o1-1) + p2_8 * F_inzzm(o1) + p3_8 * F_inzzm(o1+1) + p4_8 * F_inzzm(o1+2) + % p1m_8 * F_inzz (o1-1) + p2m_8 * F_inzz (o1) + p3m_8 * F_inzz (o1+1) + p4m_8 * F_inzz (o1+2) d2_x_8 = p1_8 * F_inzzm(o2-1) + p2_8 * F_inzzm(o2) + p3_8 * F_inzzm(o2+1) + p4_8 * F_inzzm(o2+2) + % p1m_8 * F_inzz (o2-1) + p2m_8 * F_inzz (o2) + p3m_8 * F_inzz (o2+1) + p4m_8 * F_inzz (o2+2) d3_x_8 = p1_8 * F_inzzm(o3-1) + p2_8 * F_inzzm(o3) + p3_8 * F_inzzm(o3+1) + p4_8 * F_inzzm(o3+2) + % p1m_8 * F_inzz (o3-1) + p2m_8 * F_inzz (o3) + p3m_8 * F_inzz (o3+1) + p4m_8 * F_inzz (o3+2) d4_x_8 = p1_8 * F_inzzm(o4-1) + p2_8 * F_inzzm(o4) + p3_8 * F_inzzm(o4+1) + p4_8 * F_inzzm(o4+2) + % p1m_8 * F_inzz (o4-1) + p2m_8 * F_inzz (o4) + p3m_8 * F_inzz (o4+1) + p4m_8 * F_inzz (o4+2) * *********************************************************************** * y interpolation *********************************************************************** * * TRAJECTORY * ---------- xxm_8 = F_capym(n) xmm_8 = 1 - xxm_8 * * TLM * --- xx_8 = F_capy(n) xm_8 = - xx_8 * * TRAJ (constant) * --------------- ggm_8 = F_yggm(n) ddm_8 = F_yddm(n) * * TRAJ (constant) * --------------- t10m_8 = 1 + ggm_8 t20m_8 = 1 + ddm_8 p10m_8 = ggm_8 + t20m_8 p40m_8 = ddm_8 * t20m_8 * p10m_8 * p11m_8 = ggm_8 * t10m_8 * p10m_8 t3m_8 = ggm_8 * t20m_8 t1m_8 = t10m_8 * ddm_8 * * TRAJECTORY * ---------- p20m_8 = t20m_8 - xxm_8 p30m_8 = ggm_8 + xxm_8 * t2m_8 =-xxm_8 * xmm_8 p4m_8 = t2m_8 * p30m_8 / p40m_8 * p1m_8 = t2m_8 * p20m_8 / p11m_8 * p31m_8 = p20m_8 * p30m_8 * p2m_8 = xmm_8 * p31m_8 / t3m_8 * p3m_8 = xxm_8 * p31m_8 / t1m_8 * * TLM * --- p20_8 = - xx_8 p30_8 = xx_8 * t2_8 = - xx_8 * xmm_8 - xxm_8 * xm_8 p4_8 = t2_8 * p30m_8 / p40m_8 + t2m_8 * p30_8 / p40m_8 * p1_8 = t2_8 * p20m_8 / p11m_8 + t2m_8 * p20_8 / p11m_8 * p31_8 = p20_8 * p30m_8 + p20m_8 * p30_8 * p2_8 = xm_8 * p31m_8 / t3m_8 + xmm_8 * p31_8 / t3m_8 * p3_8 = xx_8 * p31m_8 / t1m_8 + xxm_8 * p31_8 / t1m_8 * * TRAJECTORY * ---------- a1m_y_8 = p1m_8 * a1m_x_8 + p2m_8 * a2m_8 + p3m_8 * a3m_8 + p4m_8 * a4m_8 b1m_y_8 = p1m_8 * b1m_x_8 + p2m_8 * b2m_8 + p3m_8 * b3m_8 + p4m_8 * b4m_8 c1m_y_8 = p1m_8 * c1m_x_8 + p2m_8 * c2m_8 + p3m_8 * c3m_8 + p4m_8 * c4m_8 d1m_y_8 = p1m_8 * d1m_x_8 + p2m_8 * d2m_8 + p3m_8 * d3m_8 + p4m_8 * d4m_8 * * TLM * --- a1_y_8 = p1_8 * a1m_x_8 + p2_8 * a2m_8 + p3_8 * a3m_8 + p4_8 * a4m_8 % +p1m_8 * a1_x_8 + p2m_8 * a2_x_8 + p3m_8 * a3_x_8 + p4m_8 * a4_x_8 b1_y_8 = p1_8 * b1m_x_8 + p2_8 * b2m_8 + p3_8 * b3m_8 + p4_8 * b4m_8 % +p1m_8 * b1_x_8 + p2m_8 * b2_x_8 + p3m_8 * b3_x_8 + p4m_8 * b4_x_8 c1_y_8 = p1_8 * c1m_x_8 + p2_8 * c2m_8 + p3_8 * c3m_8 + p4_8 * c4m_8 % +p1m_8 * c1_x_8 + p2m_8 * c2_x_8 + p3m_8 * c3_x_8 + p4m_8 * c4_x_8 d1_y_8 = p1_8 * d1m_x_8 + p2_8 * d2m_8 + p3_8 * d3m_8 + p4_8 * d4m_8 % +p1m_8 * d1_x_8 + p2m_8 * d2_x_8 + p3m_8 * d3_x_8 + p4m_8 * d4_x_8 * *********************************************************************** * z interpolation *********************************************************************** * * TRAJECTORY * ---------- xxm_8 = F_capzm(n) xmm_8 = 1.0 - xxm_8 t1m_8 = F_czm(n) * ( xmm_8 + 1.0 ) t2m_8 = F_czm(n) * ( xxm_8 + 1.0 ) * * TLM * --- xx_8 = F_capz(n) xm_8 = - xx_8 t1_8 = F_cz(n) * ( xmm_8 + 1.0 ) + F_czm(n) * ( xm_8 ) t2_8 = F_cz(n) * ( xxm_8 + 1.0 ) + F_czm(n) * ( xx_8 ) * * TRAJECTORY * ---------- F_outm(n)= xmm_8 * a1m_y_8 + t1m_8 * b1m_y_8 + xxm_8 * c1m_y_8 + t2m_8 * d1m_y_8 * * TLM * --- F_out(n) = xm_8 * a1m_y_8 + t1_8 * b1m_y_8 + xx_8 * c1m_y_8 + t2_8 * d1m_y_8 % +xmm_8 * a1_y_8 + t1m_8 * b1_y_8 + xxm_8 * c1_y_8 + t2m_8 * d1_y_8 * 180 continue 190 continue 200 continue !$omp enddo * endif !$omp end parallel * return end