#include "dims.h" ! subroutine mklatbnd(lat,njold,njnew,zero_unused) use init_module,only: istep use cons_module,only: len1,len2,len3,kmax,kmaxp1,imaxh,kpole, | kflds implicit none ! ! Make boundary latitude lat, using f(njold). Store in ! f(njnew). (lat will be -1, 0, jmax+1, or jmax+2) ! #include "params.h" #include "fcom.h" #include "index.h" ! ! Args: integer,intent(in) :: lat,njold,njnew logical,intent(in) :: zero_unused ! ! Locals: integer :: ilim,len,klim,k,n,i,id,nxold,nxnew real :: sign ! ilim = imaxh+2 field_loop: do n=1,nflds if (kflds(n)==1) then klim = 1 len = len1 elseif (kflds(n)==2) then klim = kmax len = len2 else klim = kmaxp1 len = len3 endif nxold = njold+ndexa(n+1) nxnew = njnew+ndexa(n+1) if (kpole(n)==0.or.(kpole(n)==2.and.istep > 1)) then if (zero_unused) then do i=1,len f(i,nxnew) = 0. enddo endif cycle field_loop endif sign = 1. if (kpole(n) < 0) sign = -1. do k=1,klim id = imaxh+1 ! ! Note if not changing sign (sign==1.), some of f(i,nxold) may be ! undefined, (e.g., NVC at kmaxp1 when run iter > 1), so cannot ! say f(i,nxnew) = sign*f(i,nxold). ! if (sign==-1.) then do i=1,ilim f(id+2,nxnew) = -f(i+2,nxold) f(i ,nxnew) = -f(id,nxold) id = id+1 enddo else do i=1,ilim f(id+2,nxnew) = f(i+2,nxold) f(i ,nxnew) = f(id,nxold) id = id+1 enddo endif nxold = nxold+1 nxnew = nxnew+1 enddo enddo field_loop return end ! !----------------------------------------------------------------------- ! subroutine mklatbndfg(jnew,jold,ixt,zero_unused) use init_module,only: istep use cons_module,only: len1,len2,len3,kmax,kmaxp1,imaxh,kpole, | kflds implicit none ! ! Make boundary latitude jnew, using jold, i.e., read jold ! from fg and write jnew to fg. ! (jnew will be -1, 0, jmax+1, or jmax+2) ! (jold will be 2, 1, jmax , or jmax-1) ! #include "params.h" #include "fgcom.h" #include "index.h" ! ! Args: integer,intent(in) :: jnew,jold,ixt logical,intent(in) :: zero_unused ! ! Locals: integer :: ilim,len,klim,n,i,id,ndex,k real :: sign ! ilim = imaxh+2 field_loop: do n=1,nflds if (kflds(n)==1) then klim = 1 len = len1 elseif (kflds(n)==2) then klim = kmax len = len2 else klim = kmaxp1 len = len3 endif ndex = ndexa(n+1)+1 if (kpole(n)==0.or.(kpole(n)==2.and.istep > 1)) then if (zero_unused) then do i=1,len fg(i,ndex,jnew,ixt) = 0. enddo endif cycle field_loop endif sign = 1. if (kpole(n) < 0) sign = -1. do k=1,klim id = imaxh+1 ! ! Note if not changing sign (sign==1.), some of f(i,nxold) may be ! undefined, (e.g., NVC at kmaxp1 when run iter > 1), so cannot ! say f(i,nxnew) = sign*f(i,nxold). ! if (sign==-1.) then do i=1,ilim fg(id+2,ndex,jnew,ixt) = -fg(i+2,ndex,jold,ixt) fg(i ,ndex,jnew,ixt) = -fg(id,ndex,jold,ixt) id = id+1 enddo else do i=1,ilim fg(id+2,ndex,jnew,ixt) = fg(i+2,ndex,jold,ixt) fg(i ,ndex,jnew,ixt) = fg(id,ndex,jold,ixt) id = id+1 enddo endif ndex = ndex+1 enddo enddo field_loop return end