!-------------------------------------- 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 hzd_delpwr_1d - Same as hzd_delpwr for 1d diffusion * (based on HZD_DELPWR, A.Qaddouri) * #include "model_macros_f.h"*
subroutine hzd_delpwr_1d (F_deltai_8,F_pwr,gni,nx3,F_opsyp0_8, 5,1 $ F_opsyp2_8,F_opsypm_8,F_eival_8,F_cdiff) * #include "impnone.cdk"
* integer F_pwr,gni,nx3 real F_cdiff real*8 F_deltai_8(1:F_pwr,1:F_pwr,1:gni,nx3), $ F_opsypm_8(*),F_opsyp0_8(*),F_opsyp2_8(*),F_eival_8(*) * *Author * M.Tanguay * *revision * v3_20 - Tanguay M. - initial version * *object * see id section * *arguments * Name I/O Description *--------------------------------------------------------------------- * F_deltai_8_8 O diagonal(block) part of LU *--------------------------------------------------------------------- * #include "glb_ld.cdk"
#include "glb_pil.cdk"
* real*8 F_a_8(1:F_pwr,1:F_pwr,1:gni,nx3), $ F_c_8(1:F_pwr,1:F_pwr,1:gni,nx3), $ b_8(1:F_pwr,1:F_pwr,1:gni,nx3) * real*8 ZERO_8 parameter( ZERO_8 = 0.0 ) * integer i, j, ii, o1, o2, l_pil_w,l_pil_e * * __________________________________________________________________ * * The I vector lies on the Y processor so, l_pil_w and l_pil_e will * represent the pilot region along I * l_pil_w=0 l_pil_e=0 if (l_south) l_pil_w= Lam_pil_w if (l_north) l_pil_e= Lam_pil_e do j=1,nx3 do i=1,gni do o1=1,F_pwr do o2=1,F_pwr F_a_8(o1,o2,i,j)=ZERO_8 b_8(o1,o2,i,j) =ZERO_8 F_c_8(o1,o2,i,j)=ZERO_8 enddo enddo enddo enddo * * Calcul des matrices * if(F_pwr.eq.1) then * j=1+Lam_pil_s do i = 1,gni ii = i F_c_8(1,1,i,j)= F_opsyp2_8(2*nx3+j) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) $ - dble(F_cdiff)*F_opsyp0_8(nx3+j) enddo * do i = 1,gni ii = i do j=2+Lam_pil_s, nx3-1-Lam_pil_n F_a_8(1,1,i,j)= F_opsyp2_8(2*nx3+j-1) F_c_8(1,1,i,j)= F_opsyp2_8(2*nx3+j) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) $ - dble(F_cdiff)*F_opsyp0_8(nx3+j) enddo enddo * j=nx3-Lam_pil_n do i = 1,gni ii = i F_a_8(1,1,i,j)= F_opsyp2_8(2*nx3+j-1) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) $ - dble(F_cdiff)*F_opsyp0_8(nx3+j) enddo * endif * if (F_pwr.eq.2) then * j=1+Lam_pil_s do i = 1,gni ii = i F_c_8(1,1,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(2,2,i,j)= F_opsyp2_8(2*nx3+j) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,1,i,j)= - F_opsyp0_8(nx3+j) b_8(1,2,i,j)= dble(F_cdiff)*F_opsyp0_8(nx3+j) enddo * do i = 1,gni ii = i do j=2+Lam_pil_s, nx3-1-Lam_pil_n F_a_8(1,1,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(2,2,i,j)= F_opsyp2_8(2*nx3+j-1) F_c_8(1,1,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(2,2,i,j)= F_opsyp2_8(2*nx3+j) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,1,i,j)= - F_opsyp0_8(nx3+j) b_8(1,2,i,j)= dble(F_cdiff)*F_opsyp0_8(nx3+j) enddo enddo * j=nx3-Lam_pil_n do i = 1,gni ii = i F_a_8(1,1,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(2,2,i,j)= F_opsyp2_8(2*nx3+j-1) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,1,i,j)= - F_opsyp0_8(nx3+j) b_8(1,2,i,j)= dble(F_cdiff)*F_opsyp0_8(nx3+j) enddo * endif * if(F_pwr.eq.3) then j=1+Lam_pil_s do i = 1,gni ii = i F_c_8(1,1,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(2,2,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(3,3,i,j)= F_opsyp2_8(2*nx3+j) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(3,3,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(1,3,i,j)= -dble(F_cdiff)*F_opsyp0_8(nx3+j) b_8(2,1,i,j)= -F_opsyp0_8(nx3+j) b_8(3,2,i,j)= -F_opsyp0_8(nx3+j) enddo * do i = 1,gni ii = i do j=2+Lam_pil_s, nx3-1-Lam_pil_n F_a_8(1,1,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(2,2,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(3,3,i,j)= F_opsyp2_8(2*nx3+j-1) F_c_8(1,1,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(2,2,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(3,3,i,j)= F_opsyp2_8(2*nx3+j) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(3,3,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(1,3,i,j)= -dble(F_cdiff)*F_opsyp0_8(nx3+j) b_8(2,1,i,j)= -F_opsyp0_8(nx3+j) b_8(3,2,i,j)= -F_opsyp0_8(nx3+j) enddo enddo * j=nx3-Lam_pil_n do i = 1,gni ii = i F_a_8(1,1,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(2,2,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(3,3,i,j)= F_opsyp2_8(2*nx3+j-1) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(3,3,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(1,3,i,j)= -dble(F_cdiff)*F_opsyp0_8(nx3+j) b_8(2,1,i,j)= -F_opsyp0_8(nx3+j) b_8(3,2,i,j)= -F_opsyp0_8(nx3+j) enddo * endif * if(F_pwr.eq.4) then * j=1+Lam_pil_s do i = 1,gni ii = i F_c_8(1,1,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(2,2,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(3,3,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(4,4,i,j)= F_opsyp2_8(2*nx3+j) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(3,3,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(4,4,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(1,4,i,j)= dble(F_cdiff)*F_opsyp0_8(nx3+j) b_8(2,1,i,j)= - F_opsyp0_8(nx3+j) b_8(3,2,i,j)= - F_opsyp0_8(nx3+j) b_8(4,3,i,j)= - F_opsyp0_8(nx3+j) enddo * do i = 1,gni ii = i do j=2+Lam_pil_s, nx3-1-Lam_pil_n F_a_8(1,1,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(2,2,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(3,3,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(4,4,i,j)= F_opsyp2_8(2*nx3+j-1) F_c_8(1,1,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(2,2,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(3,3,i,j)= F_opsyp2_8(2*nx3+j) F_c_8(4,4,i,j)= F_opsyp2_8(2*nx3+j) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(3,3,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(4,4,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(1,4,i,j)= dble(F_cdiff)*F_opsyp0_8(nx3+j) b_8(2,1,i,j)= - F_opsyp0_8(nx3+j) b_8(3,2,i,j)= - F_opsyp0_8(nx3+j) b_8(4,3,i,j)= - F_opsyp0_8(nx3+j) enddo enddo * j=nx3-Lam_pil_n do i = 1,gni ii = i F_a_8(1,1,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(2,2,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(3,3,i,j)= F_opsyp2_8(2*nx3+j-1) F_a_8(4,4,i,j)= F_opsyp2_8(2*nx3+j-1) b_8(1,1,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(2,2,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(3,3,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(4,4,i,j)= F_opsyp2_8(nx3+j) $ + F_eival_8(ii)*F_opsypm_8(nx3+j) b_8(1,4,i,j)= dble(F_cdiff)*F_opsyp0_8(nx3+j) b_8(2,1,i,j)= - F_opsyp0_8(nx3+j) b_8(3,2,i,j)= - F_opsyp0_8(nx3+j) b_8(4,3,i,j)= - F_opsyp0_8(nx3+j) enddo * endif * * Factorisation * call hzd_bfct_1d
(F_a_8,b_8,F_c_8,F_deltai_8,F_pwr,gni,nx3) * * __________________________________________________________________ * return end