ROMS
Loading...
Searching...
No Matches
uv_var_change_mod Module Reference

Functions/Subroutines

subroutine, public uv_c2a_grid (ng, tile, model, ninp)
 
subroutine uv_c2a_grid_tile (ng, tile, model, ninp, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, rmask, cosangler, sinangler, u, v, ua, va)
 
subroutine, public uv_a2c_grid (ng, tile, model, nout)
 
subroutine uv_a2c_grid_tile (ng, tile, model, nout, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, umask, vmask, cosangler, sinangler, ua, va, u, v)
 
subroutine, public tl_uv_c2a_grid (ng, tile, model, ninp)
 
subroutine tl_uv_c2a_grid_tile (ng, tile, model, ninp, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, rmask, cosangler, sinangler, tl_u, tl_v, tl_ua, tl_va)
 
subroutine, public tl_uv_a2c_grid (ng, tile, model, nout)
 
subroutine tl_uv_a2c_grid_tile (ng, tile, model, nout, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, umask, vmask, cosangler, sinangler, tl_ua, tl_va, tl_u, tl_v)
 
subroutine, public ad_uv_c2a_grid (ng, tile, model, ninp)
 
subroutine ad_uv_c2a_grid_tile (ng, tile, model, ninp, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, rmask, cosangler, sinangler, ad_u, ad_v, ad_ua, ad_va)
 
subroutine, public ad_uv_a2c_grid (ng, tile, model, nout)
 
subroutine ad_uv_a2c_grid_tile (ng, tile, model, nout, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, umask, vmask, cosangler, sinangler, ad_ua, ad_va, ad_u, ad_v)
 

Function/Subroutine Documentation

◆ ad_uv_a2c_grid()

subroutine, public uv_var_change_mod::ad_uv_a2c_grid ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) nout )

Definition at line 922 of file uv_var_change.F.

923!***********************************************************************
924!
925! Imported variable declarations.
926!
927 integer, intent(in) :: ng, tile, model, nout
928!
929! Local variable declarations.
930!
931 character (len=*), parameter :: MyFile = &
932 & __FILE__
933!
934# include "tile.h"
935!
936# ifdef PROFILE
937 CALL wclock_on (ng, model, 34, __line__, myfile)
938# endif
939 CALL ad_uv_a2c_grid_tile (ng, tile, model, nout, &
940 & lbi, ubi, lbj, ubj, &
941 & imins, imaxs, jmins, jmaxs, &
942# ifdef MASKING
943 & grid(ng) % umask, &
944 & grid(ng) % vmask, &
945# endif
946 & grid(ng) % CosAngler, &
947 & grid(ng) % SinAngler, &
948 & ocean(ng) % ad_ua, &
949 & ocean(ng) % ad_va, &
950 & ocean(ng) % ad_u, &
951 & ocean(ng) % ad_v)
952# ifdef PROFILE
953 CALL wclock_off (ng, model, 34, __line__, myfile)
954# endif
955!
956 RETURN
recursive subroutine wclock_off(ng, model, region, line, routine)
Definition timers.F:148
recursive subroutine wclock_on(ng, model, region, line, routine)
Definition timers.F:3

References ad_uv_a2c_grid_tile(), mod_grid::grid, mod_ocean::ocean, wclock_off(), and wclock_on().

Here is the call graph for this function:

◆ ad_uv_a2c_grid_tile()

subroutine uv_var_change_mod::ad_uv_a2c_grid_tile ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) nout,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
integer, intent(in) imins,
integer, intent(in) imaxs,
integer, intent(in) jmins,
integer, intent(in) jmaxs,
real(r8), dimension(lbi:,lbj:), intent(in) umask,
real(r8), dimension(lbi:,lbj:), intent(in) vmask,
real(r8), dimension(lbi:,lbj:), intent(in) cosangler,
real(r8), dimension(lbi:,lbj:), intent(in) sinangler,
real(r8), dimension(lbi:,lbj:,:), intent(inout) ad_ua,
real(r8), dimension(lbi:,lbj:,:), intent(inout) ad_va,
real(r8), dimension(lbi:,lbj:,:,:), intent(inout) ad_u,
real(r8), dimension(lbi:,lbj:,:,:), intent(inout) ad_v )
private

CALL mp_exchange3d (ng, tile, model, 2, & & LBi, UBi, LBj, UBj, 1, N(ng), & & NghostPoints, & & EWperiodic(ng), NSperiodic(ng), & & tl_u(:,:,:,nout), tl_v(:,:,:,nout))

tl_v(i,j,k,nout)=tl_v(i,j,k,nout)*vmask(i,j)

tl_v(i,j,k,nout)=0.5_r8*(tl_Vrho(i,j-1)+tl_Vrho(i,j))

tl_u(i,j,k,nout)=tl_u(i,j,k,nout)*umask(i,j)

tl_u(i,j,k,nout)=0.5_r8*(tl_Urho(i-1,j)+tl_Urho(i,j))

tl_Vrho(i,j)=tl_va(i,j,k)*CosAngler(i,j)- & & tl_ua(i,j,k)*SinAngler(i,j)

tl_Urho(i,j)=tl_ua(i,j,k)*CosAngler(i,j)+ & & tl_va(i,j,k)*SinAngler(i,j)

Definition at line 960 of file uv_var_change.F.

968!***********************************************************************
969!
970! Imported variable declarations.
971!
972 integer, intent(in) :: ng, tile, model, nout
973 integer, intent(in) :: LBi, UBi, LBj, UBj
974 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
975!
976# ifdef ASSUMED_SHAPE
977 real(r8), intent(in) :: CosAngler(LBi:,LBj:)
978 real(r8), intent(in) :: SinAngler(LBi:,LBj:)
979# ifdef MASKING
980 real(r8), intent(in) :: umask(LBi:,LBj:)
981 real(r8), intent(in) :: vmask(LBi:,LBj:)
982# endif
983 real(r8), intent(inout) :: ad_ua(LBi:,LBj:,:)
984 real(r8), intent(inout) :: ad_va(LBi:,LBj:,:)
985
986 real(r8), intent(inout) :: ad_u(LBi:,LBj:,:,:)
987 real(r8), intent(inout) :: ad_v(LBi:,LBj:,:,:)
988# else
989 real(r8), intent(in) :: CosAngler(LBi:UBi,LBj:UBj)
990 real(r8), intent(in) :: SinAngler(LBi:UBi,LBj:UBj)
991# ifdef MASKING
992 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
993 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
994# endif
995 real(r8), intent(inout) :: ad_ua(LBi:UBi,LBj:UBj,N(ng))
996 real(r8), intent(inout) :: ad_va(LBi:UBi,LBj:UBj,N(ng))
997
998 real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
999 real(r8), intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
1000# endif
1001!
1002! Local variable declarations.
1003!
1004 integer :: i, j, k
1005!
1006 real(r8) :: adfac, adfac1, adfac2
1007!
1008 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Urho, ad_Vrho
1009
1010# include "set_bounds.h"
1011!
1012!-----------------------------------------------------------------------
1013! Adjoint of transform vector components from A-grid to C-grid.
1014!-----------------------------------------------------------------------
1015!
1016! Initialize.
1017!
1018 adfac=0.0_r8
1019 adfac1=0.0_r8
1020 adfac2=0.0_r8
1021 ad_urho=0.0_r8
1022 ad_vrho=0.0_r8
1023
1024# ifdef DISTRIBUTE
1025!
1026! Adjoint of exchange boundary data.
1027!
1028!> CALL mp_exchange3d (ng, tile, model, 2, &
1029!> & LBi, UBi, LBj, UBj, 1, N(ng), &
1030!> & NghostPoints, &
1031!> & EWperiodic(ng), NSperiodic(ng), &
1032!> & tl_u(:,:,:,nout), tl_v(:,:,:,nout))
1033!>
1034 CALL ad_mp_exchange3d (ng, tile, model, 2, &
1035 & lbi, ubi, lbj, ubj, 1, n(ng), &
1036 & nghostpoints, &
1037 & ewperiodic(ng), nsperiodic(ng), &
1038 & ad_u(:,:,:,nout), ad_v(:,:,:,nout))
1039# endif
1040!
1041! Adjoint of variable change from A-grid to C-grid.
1042!
1043 k_loop :DO k=1,n(ng)
1044!
1045! Adjoint of compute staggered C-grid components.
1046!
1047 DO j=jstr,jendr
1048 DO i=istrr,iendr
1049# ifdef MASKING
1050!> tl_v(i,j,k,nout)=tl_v(i,j,k,nout)*vmask(i,j)
1051!>
1052 ad_v(i,j,k,nout)=ad_v(i,j,k,nout)*vmask(i,j)
1053# endif
1054!> tl_v(i,j,k,nout)=0.5_r8*(tl_Vrho(i,j-1)+tl_Vrho(i,j))
1055!>
1056 adfac=0.5_r8*ad_v(i,j,k,nout)
1057 ad_vrho(i,j-1)=ad_vrho(i,j-1)+adfac
1058 ad_vrho(i,j )=ad_vrho(i,j )+adfac
1059 ad_v(i,j,k,nout)=0.0_r8
1060 END DO
1061 END DO
1062!
1063 DO j=jstrr,jendr
1064 DO i=istr,iendr
1065# ifdef MASKING
1066!> tl_u(i,j,k,nout)=tl_u(i,j,k,nout)*umask(i,j)
1067!>
1068 ad_u(i,j,k,nout)=ad_u(i,j,k,nout)*umask(i,j)
1069# endif
1070!> tl_u(i,j,k,nout)=0.5_r8*(tl_Urho(i-1,j)+tl_Urho(i,j))
1071!>
1072 adfac=0.5_r8*ad_u(i,j,k,nout)
1073 ad_urho(i-1,j)=ad_urho(i-1,j)+adfac
1074 ad_urho(i ,j)=ad_urho(i ,j)+adfac
1075 ad_u(i,j,k,nout)=0.0_r8
1076 END DO
1077 END DO
1078!
1079! Adjoint of rotate vector components to computations (XI,ETA)
1080! directions.
1081!
1082 DO j=jstr-1,jendr
1083 DO i=istr-1,iendr
1084!> tl_Vrho(i,j)=tl_va(i,j,k)*CosAngler(i,j)- &
1085!> & tl_ua(i,j,k)*SinAngler(i,j)
1086!>
1087 adfac1=cosangler(i,j)*ad_vrho(i,j)
1088 adfac2=sinangler(i,j)*ad_vrho(i,j)
1089 ad_va(i,j,k)=ad_va(i,j,k)+adfac1
1090 ad_ua(i,j,k)=ad_ua(i,j,k)-adfac2
1091 ad_vrho(i,j)=0.0_r8
1092!> tl_Urho(i,j)=tl_ua(i,j,k)*CosAngler(i,j)+ &
1093!> & tl_va(i,j,k)*SinAngler(i,j)
1094!>
1095 adfac1=cosangler(i,j)*ad_urho(i,j)
1096 adfac2=sinangler(i,j)*ad_urho(i,j)
1097 ad_ua(i,j,k)=ad_ua(i,j,k)+adfac1
1098 ad_va(i,j,k)=ad_va(i,j,k)+adfac2
1099 ad_urho(i,j)=0.0_r8
1100 END DO
1101 END DO
1102 END DO k_loop
1103!
1104 RETURN

References mp_exchange_mod::ad_mp_exchange3d(), mod_scalars::ewperiodic, mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by ad_uv_a2c_grid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ad_uv_c2a_grid()

subroutine, public uv_var_change_mod::ad_uv_c2a_grid ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) ninp )

Definition at line 714 of file uv_var_change.F.

715!***********************************************************************
716!
717! Imported variable declarations.
718!
719 integer, intent(in) :: ng, tile, model, ninp
720!
721! Local variable declarations.
722!
723 character (len=*), parameter :: MyFile = &
724 & __FILE__
725!
726# include "tile.h"
727!
728# ifdef PROFILE
729 CALL wclock_on (ng, model, 34, __line__, myfile)
730# endif
731 CALL ad_uv_c2a_grid_tile (ng, tile, model, ninp, &
732 & lbi, ubi, lbj, ubj, &
733 & imins, imaxs, jmins, jmaxs, &
734# ifdef MASKING
735 & grid(ng) % rmask_full, &
736# endif
737 & grid(ng) % CosAngler, &
738 & grid(ng) % SinAngler, &
739 & ocean(ng) % ad_u, &
740 & ocean(ng) % ad_v, &
741 & ocean(ng) % ad_ua, &
742 & ocean(ng) % ad_va)
743# ifdef PROFILE
744 CALL wclock_off (ng, model, 34, __line__, myfile)
745# endif
746!
747 RETURN

References ad_uv_c2a_grid_tile(), mod_grid::grid, mod_ocean::ocean, wclock_off(), and wclock_on().

Referenced by ad_step3d_uv_mod::ad_step3d_uv_tile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ad_uv_c2a_grid_tile()

subroutine uv_var_change_mod::ad_uv_c2a_grid_tile ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) ninp,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
integer, intent(in) imins,
integer, intent(in) imaxs,
integer, intent(in) jmins,
integer, intent(in) jmaxs,
real(r8), dimension(lbi:,lbj:), intent(in) rmask,
real(r8), dimension(lbi:,lbj:), intent(in) cosangler,
real(r8), dimension(lbi:,lbj:), intent(in) sinangler,
real(r8), dimension(lbi:,lbj:,:,:), intent(inout) ad_u,
real(r8), dimension(lbi:,lbj:,:,:), intent(inout) ad_v,
real(r8), dimension(lbi:,lbj:,:), intent(inout) ad_ua,
real(r8), dimension(lbi:,lbj:,:), intent(inout) ad_va )
private

CALL mp_exchange3d (ng, tile, model, 2, & & LBi, UBi, LBj, UBj, 1, N(ng), & & NghostPoints, & & EWperiodic(ng), NSperiodic(ng), & & tl_ua, tl_va)

tl_va(i,j,k)=tl_va(i,j,k)*rmask(i,j)

tl_ua(i,j,k)=tl_ua(i,j,k)*rmask(i,j)

tl_va(i,j,k)=tl_Vrho(i,j)*CosAngler(i,j)+ & & tl_Urho(i,j)*SinAngler(i,j)

tl_ua(i,j,k)=tl_Urho(i,j)*CosAngler(i,j) & & tl_Vrho(i,j)*SinAngler(i,j)

tl_Vrho(i,Jend+1)=tl_Vrho(i,Jend)

tl_Vrho(i,Jstr-1)=tl_Vrho(i,Jstr)

tl_Vrho(i,j)=0.5_r8*(tl_v(i,j,k,ninp)+tl_v(i,j+1,k,ninp))

tl_Urho(Iend+1,j)=tl_Urho(Iend,j)

tl_Urho(Istr-1,j)=tl_Urho(Istr,j)

tl_Urho(i,j)=0.5_r8*(tl_u(i,j,k,ninp)+tl_u(i+1,j,k,ninp))

Definition at line 751 of file uv_var_change.F.

759!***********************************************************************
760!
761! Imported variable declarations.
762!
763 integer, intent(in) :: ng, tile, model, ninp
764 integer, intent(in) :: LBi, UBi, LBj, UBj
765 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
766!
767# ifdef ASSUMED_SHAPE
768 real(r8), intent(in) :: CosAngler(LBi:,LBj:)
769 real(r8), intent(in) :: SinAngler(LBi:,LBj:)
770# ifdef MASKING
771 real(r8), intent(in) :: rmask(LBi:,LBj:)
772# endif
773 real(r8), intent(inout) :: ad_u(LBi:,LBj:,:,:)
774 real(r8), intent(inout) :: ad_v(LBi:,LBj:,:,:)
775
776 real(r8), intent(inout) :: ad_ua(LBi:,LBj:,:)
777 real(r8), intent(inout) :: ad_va(LBi:,LBj:,:)
778# else
779 real(r8), intent(in) :: CosAngler(LBi:UBi,LBj:UBj)
780 real(r8), intent(in) :: SinAngler(LBi:UBi,LBj:UBj)
781# ifdef MASKING
782 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
783# endif
784 real(r8), intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
785 real(r8), intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
786
787 real(r8), intent(inout) :: ad_ua(LBi:UBi,LBj:UBj,N(ng))
788 real(r8), intent(inout) :: tl_va(LBi:UBi,LBj:UBj,N(ng))
789# endif
790!
791! Local variable declarations.
792!
793 integer :: i, j, k
794!
795 real(r8) :: adfac, adfac1, adfac2
796 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Urho, ad_Vrho
797
798# include "set_bounds.h"
799!
800!-----------------------------------------------------------------------
801! Adjoint of transform vector components from C-grid to A-grid.
802!-----------------------------------------------------------------------
803!
804! Initialize.
805!
806 adfac=0.0_r8
807 adfac1=0.0_r8
808 adfac2=0.0_r8
809 ad_urho=0.0_r8
810 ad_vrho=0.0_r8
811
812# ifdef DISTRIBUTE
813!
814! Adjoint of exchange boundary data.
815!
816!> CALL mp_exchange3d (ng, tile, model, 2, &
817!> & LBi, UBi, LBj, UBj, 1, N(ng), &
818!> & NghostPoints, &
819!> & EWperiodic(ng), NSperiodic(ng), &
820!> & tl_ua, tl_va)
821!>
822 CALL ad_mp_exchange3d (ng, tile, model, 2, &
823 & lbi, ubi, lbj, ubj, 1, n(ng), &
824 & nghostpoints, &
825 & ewperiodic(ng), nsperiodic(ng), &
826 & ad_ua, ad_va)
827# endif
828!
829! Adjoint of variable change from C-grid to A-grid.
830!
831 k_loop : DO k=1,n(ng)
832!
833! Adjoint of rotate from computational to gegraphical Eastward and
834! Northward directions.
835!
836 DO j=jstrr,jendr
837 DO i=istrr,iendr
838# ifdef MASKING
839!> tl_va(i,j,k)=tl_va(i,j,k)*rmask(i,j)
840!>
841 ad_va(i,j,k)=ad_va(i,j,k)*rmask(i,j)
842!> tl_ua(i,j,k)=tl_ua(i,j,k)*rmask(i,j)
843!>
844 ad_ua(i,j,k)=ad_ua(i,j,k)*rmask(i,j)
845# endif
846!> tl_va(i,j,k)=tl_Vrho(i,j)*CosAngler(i,j)+ &
847!> & tl_Urho(i,j)*SinAngler(i,j)
848!>
849 adfac1=cosangler(i,j)*ad_va(i,j,k)
850 adfac2=sinangler(i,j)*ad_va(i,j,k)
851 ad_vrho(i,j)=ad_vrho(i,j)+adfac1
852 ad_urho(i,j)=ad_urho(i,j)+adfac2
853 ad_va(i,j,k)=0.0_r8
854!> tl_ua(i,j,k)=tl_Urho(i,j)*CosAngler(i,j) &
855!> & tl_Vrho(i,j)*SinAngler(i,j)
856!>
857 adfac1=cosangler(i,j)*ad_ua(i,j,k)
858 adfac2=sinangler(i,j)*ad_ua(i,j,k)
859 ad_urho=ad_urho+adfac1
860 ad_vrho=ad_vrho-adfac2
861 ad_ua(i,j,k)=0.0_r8
862 END DO
863 END DO
864!
865! Adjoint of compute A-grid (cell center) vector components.
866!
867 DO j=jstr,jend
868 DO i=istrr,iendr
869 IF (.not.nsperiodic(ng)) THEN
870 IF (domain(ng)%Northern_Edge(tile)) THEN
871!> tl_Vrho(i,Jend+1)=tl_Vrho(i,Jend)
872!>
873 ad_vrho(i,jend )=ad_vrho(i,jend)+ad_vrho(i,jend+1)
874 ad_vrho(i,jend+1)=0.0_r8
875 END IF
876 IF (domain(ng)%Southern_Edge(tile)) THEN
877!> tl_Vrho(i,Jstr-1)=tl_Vrho(i,Jstr)
878!>
879 ad_vrho(i,jstr )=ad_vrho(i,jstr)+ad_vrho(i,jstr-1)
880 ad_vrho(i,jstr-1)=0.0_r8
881 END IF
882 END IF
883!> tl_Vrho(i,j)=0.5_r8*(tl_v(i,j,k,ninp)+tl_v(i,j+1,k,ninp))
884!>
885 adfac=0.5_r8*ad_vrho(i,j)
886 ad_v(i,j ,k,ninp)=ad_v(i,j ,k,ninp)+adfac
887 ad_v(i,j+1,k,ninp)=ad_v(i,j+1,k,ninp)+adfac
888 ad_vrho(i,j)=0.0_r8
889 END DO
890 END DO
891!
892 DO j=jstrr,jendr
893 DO i=istr,iend
894 IF (.not.ewperiodic(ng)) THEN
895 IF (domain(ng)%Eastern_Edge(tile)) THEN
896!> tl_Urho(Iend+1,j)=tl_Urho(Iend,j)
897!>
898 ad_urho(iend ,j)=ad_urho(iend,j)+ad_urho(iend+1,j)
899 ad_urho(iend+1,j)=0.0_r8
900 END IF
901 IF (domain(ng)%Western_Edge(tile)) THEN
902!> tl_Urho(Istr-1,j)=tl_Urho(Istr,j)
903!>
904 ad_urho(istr ,j)=ad_urho(istr,j)+ad_urho(istr-1,j)
905 ad_urho(istr-1,j)=0.0_r8
906 END IF
907 END IF
908!> tl_Urho(i,j)=0.5_r8*(tl_u(i,j,k,ninp)+tl_u(i+1,j,k,ninp))
909!>
910 adfac=0.5_r8*ad_urho(i,j)
911 ad_u(i ,j,k,ninp)=ad_u(i ,j,k,ninp)+adfac
912 ad_u(i+1,j,k,ninp)=ad_u(i+1,j,k,ninp)+adfac
913 ad_urho(i,j)=0.0_r8
914 END DO
915 END DO
916 END DO k_loop
917!
918 RETURN

References mp_exchange_mod::ad_mp_exchange3d(), mod_param::domain, mod_scalars::ewperiodic, mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by ad_uv_c2a_grid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ tl_uv_a2c_grid()

subroutine, public uv_var_change_mod::tl_uv_a2c_grid ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) nout )

Definition at line 550 of file uv_var_change.F.

551!***********************************************************************
552!
553! Imported variable declarations.
554!
555 integer, intent(in) :: ng, tile, model, nout
556!
557! Local variable declarations.
558!
559 character (len=*), parameter :: MyFile = &
560 & __FILE__
561!
562# include "tile.h"
563!
564# ifdef PROFILE
565 CALL wclock_on (ng, model, 34, __line__, myfile)
566# endif
567 CALL tl_uv_a2c_grid_tile (ng, tile, model, nout, &
568 & lbi, ubi, lbj, ubj, &
569 & imins, imaxs, jmins, jmaxs, &
570# ifdef MASKING
571 & grid(ng) % umask_full, &
572 & grid(ng) % vmask_full, &
573# endif
574 & grid(ng) % CosAngler, &
575 & grid(ng) % SinAngler, &
576 & ocean(ng) % tl_ua, &
577 & ocean(ng) % tl_va, &
578 & ocean(ng) % tl_u, &
579 & ocean(ng) % tl_v)
580# ifdef PROFILE
581 CALL wclock_off (ng, model, 34, __line__, myfile)
582# endif
583!
584 RETURN

References mod_grid::grid, mod_ocean::ocean, tl_uv_a2c_grid_tile(), wclock_off(), and wclock_on().

Here is the call graph for this function:

◆ tl_uv_a2c_grid_tile()

subroutine uv_var_change_mod::tl_uv_a2c_grid_tile ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) nout,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
integer, intent(in) imins,
integer, intent(in) imaxs,
integer, intent(in) jmins,
integer, intent(in) jmaxs,
real(r8), dimension(lbi:,lbj:), intent(in) umask,
real(r8), dimension(lbi:,lbj:), intent(in) vmask,
real(r8), dimension(lbi:,lbj:), intent(in) cosangler,
real(r8), dimension(lbi:,lbj:), intent(in) sinangler,
real(r8), dimension(lbi:,lbj:,:), intent(in) tl_ua,
real(r8), dimension(lbi:,lbj:,:), intent(in) tl_va,
real(r8), dimension(lbi:,lbj:,:,:), intent(inout) tl_u,
real(r8), dimension(lbi:,lbj:,:,:), intent(inout) tl_v )
private

Urho(i,j)=ua(i,j,k)*CosAngler(i,j)+ & & va(i,j,k)*SinAngler(i,j)

Vrho(i,j)=va(i,j,k)*CosAngler(i,j)- & & ua(i,j,k)*SinAngler(i,j)

u(i,j,k,nout)=0.5_r8*(Urho(i-1,j)+Urho(i,j))

u(i,j,k,nout)=u(i,j,k,nout)*umask(i,j)

v(i,j,k,nout)=0.5_r8*(Vrho(i,j-1)+Vrho(i,j))

v(i,j,k,nout)=v(i,j,k,nout)*vmask(i,j)

CALL mp_exchange3d (ng, tile, model, 2, & & LBi, UBi, LBj, UBj, 1, N(ng), & & NghostPoints, & & EWperiodic(ng), NSperiodic(ng), & & u(:,:,:,nout), v(:,:,:,nout))

Definition at line 588 of file uv_var_change.F.

596!***********************************************************************
597!
598! Imported variable declarations.
599!
600 integer, intent(in) :: ng, tile, model, nout
601 integer, intent(in) :: LBi, UBi, LBj, UBj
602 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
603!
604# ifdef ASSUMED_SHAPE
605 real(r8), intent(in) :: CosAngler(LBi:,LBj:)
606 real(r8), intent(in) :: SinAngler(LBi:,LBj:)
607# ifdef MASKING
608 real(r8), intent(in) :: umask(LBi:,LBj:)
609 real(r8), intent(in) :: vmask(LBi:,LBj:)
610# endif
611 real(r8), intent(in) :: tl_ua(LBi:,LBj:,:)
612 real(r8), intent(in) :: tl_va(LBi:,LBj:,:)
613
614 real(r8), intent(inout) :: tl_u(LBi:,LBj:,:,:)
615 real(r8), intent(inout) :: tl_v(LBi:,LBj:,:,:)
616# else
617 real(r8), intent(in) :: CosAngler(LBi:UBi,LBj:UBj)
618 real(r8), intent(in) :: SinAngler(LBi:UBi,LBj:UBj)
619# ifdef MASKING
620 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
621 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
622# endif
623 real(r8), intent(in) :: tl_ua(LBi:UBi,LBj:UBj,N(ng))
624 real(r8), intent(in) :: tl_va(LBi:UBi,LBj:UBj,N(ng))
625
626 real(r8), intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
627 real(r8), intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
628# endif
629!
630! Local variable declarations.
631!
632 integer :: i, j, k
633!
634 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Urho, tl_Vrho
635
636# include "set_bounds.h"
637!
638!-----------------------------------------------------------------------
639! Transform vector components from A-grid to C-grid.
640!-----------------------------------------------------------------------
641!
642 k_loop : DO k=1,n(ng)
643!
644! Rotate vector components to computational (XI,ETA) directions.
645!
646 DO j=jstr-1,jendr
647 DO i=istr-1,iendr
648!> Urho(i,j)=ua(i,j,k)*CosAngler(i,j)+ &
649!> & va(i,j,k)*SinAngler(i,j)
650!>
651 tl_urho(i,j)=tl_ua(i,j,k)*cosangler(i,j)+ &
652 & tl_va(i,j,k)*sinangler(i,j)
653!> Vrho(i,j)=va(i,j,k)*CosAngler(i,j)- &
654!> & ua(i,j,k)*SinAngler(i,j)
655!>
656 tl_vrho(i,j)=tl_va(i,j,k)*cosangler(i,j)- &
657 & tl_ua(i,j,k)*sinangler(i,j)
658 END DO
659 END DO
660!
661! Compute staggered C-grid components.
662!
663 DO j=jstrr,jendr
664 DO i=istr,istrr
665!> u(i,j,k,nout)=0.5_r8*(Urho(i-1,j)+Urho(i,j))
666!>
667 tl_u(i,j,k,nout)=0.5_r8*(tl_urho(i-1,j)+tl_urho(i,j))
668# ifdef MASKING
669!> u(i,j,k,nout)=u(i,j,k,nout)*umask(i,j)
670!>
671 tl_u(i,j,k,nout)=tl_u(i,j,k,nout)*umask(i,j)
672# endif
673 END DO
674 END DO
675!
676 DO j=jstr,jendr
677 DO i=istrr,iendr
678!> v(i,j,k,nout)=0.5_r8*(Vrho(i,j-1)+Vrho(i,j))
679!>
680 tl_v(i,j,k,nout)=0.5_r8*(tl_vrho(i,j-1)+tl_vrho(i,j))
681# ifdef MASKING
682!> v(i,j,k,nout)=v(i,j,k,nout)*vmask(i,j)
683!>
684 tl_v(i,j,k,nout)=tl_v(i,j,k,nout)*vmask(i,j)
685# endif
686 END DO
687 END DO
688 END DO k_loop
689
690# ifdef DISTRIBUTE
691!
692! Exchange boundary data.
693!
694!> CALL mp_exchange3d (ng, tile, model, 2, &
695!> & LBi, UBi, LBj, UBj, 1, N(ng), &
696!> & NghostPoints, &
697!> & EWperiodic(ng), NSperiodic(ng), &
698!> & u(:,:,:,nout), v(:,:,:,nout))
699!>
700 CALL mp_exchange3d (ng, tile, model, 2, &
701 & lbi, ubi, lbj, ubj, 1, n(ng), &
702 & nghostpoints, &
703 & ewperiodic(ng), nsperiodic(ng), &
704 & tl_u(:,:,:,nout), tl_v(:,:,:,nout))
705# endif
706!
707 RETURN

References mod_scalars::ewperiodic, mp_exchange_mod::mp_exchange3d(), mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by tl_uv_a2c_grid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ tl_uv_c2a_grid()

subroutine, public uv_var_change_mod::tl_uv_c2a_grid ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) ninp )

Definition at line 369 of file uv_var_change.F.

370!***********************************************************************
371!
372! Imported variable declarations.
373!
374 integer, intent(in) :: ng, tile, model, ninp
375!
376! Local variable declarations.
377!
378 character (len=*), parameter :: MyFile = &
379 & __FILE__
380!
381# include "tile.h"
382!
383# ifdef PROFILE
384 CALL wclock_on (ng, model, 34, __line__, myfile)
385# endif
386 CALL tl_uv_c2a_grid_tile (ng, tile, model, ninp, &
387 & lbi, ubi, lbj, ubj, &
388 & imins, imaxs, jmins, jmaxs, &
389# ifdef MASKING
390 & grid(ng) % rmask_full, &
391# endif
392 & grid(ng) % CosAngler, &
393 & grid(ng) % SinAngler, &
394 & ocean(ng) % tl_u, &
395 & ocean(ng) % tl_v, &
396 & ocean(ng) % tl_ua, &
397 & ocean(ng) % tl_va)
398# ifdef PROFILE
399 CALL wclock_off (ng, model, 34, __line__, myfile)
400# endif
401!
402 RETURN

References mod_grid::grid, mod_ocean::ocean, tl_uv_c2a_grid_tile(), wclock_off(), and wclock_on().

Referenced by rp_step3d_uv_mod::rp_step3d_uv_tile(), and tl_step3d_uv_mod::tl_step3d_uv_tile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ tl_uv_c2a_grid_tile()

subroutine uv_var_change_mod::tl_uv_c2a_grid_tile ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) ninp,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
integer, intent(in) imins,
integer, intent(in) imaxs,
integer, intent(in) jmins,
integer, intent(in) jmaxs,
real(r8), dimension(lbi:,lbj:), intent(in) rmask,
real(r8), dimension(lbi:,lbj:), intent(in) cosangler,
real(r8), dimension(lbi:,lbj:), intent(in) sinangler,
real(r8), dimension(lbi:,lbj:,:,:), intent(in) tl_u,
real(r8), dimension(lbi:,lbj:,:,:), intent(in) tl_v,
real(r8), dimension(lbi:,lbj:,:), intent(inout) tl_ua,
real(r8), dimension(lbi:,lbj:,:), intent(inout) tl_va )
private

Urho(i,j)=0.5_r8*(u(i,j,k,ninp)+u(i+1,j,k,ninp))

Urho(Istr-1,j)=Urho(Istr,j)

Urho(Iend+1,j)=Urho(Iend,j)

Vrho(i,j)=0.5_r8*(v(i,j,k,ninp)+v(i,j+1,k,ninp))

Vrho(i,Jstr-1) = Vrho(i,Jstr)

Vrho(i,Jend+1) = Vrho(i,Jend)

ua(i,j,k)=Urho(i,j)*CosAngler(i,j)- & & Vrho(i,j)*SinAngler(i,j)

va(i,j,k)=Vrho(i,j)*CosAngler(i,j)+ & & Urho(i,j)*SinAngler(i,j)

ua(i,j,k)=ua(i,j,k)*rmask(i,j)

va(i,j,k)=va(i,j,k)*rmask(i,j)

CALL mp_exchange3d (ng, tile, model, 2, & & LBi, UBi, LBj, UBj, 1, N(ng), & & NghostPoints, & & EWperiodic(ng), NSperiodic(ng), & & ua, va)

Definition at line 406 of file uv_var_change.F.

414!***********************************************************************
415!
416! Imported variable declarations.
417!
418 integer, intent(in) :: ng, tile, model, ninp
419 integer, intent(in) :: LBi, UBi, LBj, UBj
420 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
421!
422# ifdef ASSUMED_SHAPE
423 real(r8), intent(in) :: CosAngler(LBi:,LBj:)
424 real(r8), intent(in) :: SinAngler(LBi:,LBj:)
425# ifdef MASKING
426 real(r8), intent(in) :: rmask(LBi:,LBj:)
427# endif
428 real(r8), intent(in) :: tl_u(LBi:,LBj:,:,:)
429 real(r8), intent(in) :: tl_v(LBi:,LBj:,:,:)
430
431 real(r8), intent(inout) :: tl_ua(LBi:,LBj:,:)
432 real(r8), intent(inout) :: tl_va(LBi:,LBj:,:)
433# else
434 real(r8), intent(in) :: CosAngler(LBi:UBi,LBj:UBj)
435 real(r8), intent(in) :: SinAngler(LBi:UBi,LBj:UBj)
436# ifdef MASKING
437 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
438# endif
439 real(r8), intent(in) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
440 real(r8), intent(in) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
441
442 real(r8), intent(inout) :: tl_ua(LBi:UBi,LBj:UBj,N(ng))
443 real(r8), intent(inout) :: tl_va(LBi:UBi,LBj:UBj,N(ng))
444# endif
445!
446! Local variable declarations.
447!
448 integer :: i, j, k
449!
450 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: tl_Urho, tl_Vrho
451
452# include "set_bounds.h"
453!
454!-----------------------------------------------------------------------
455! Transform vector components from C-grid to A-grid.
456!-----------------------------------------------------------------------
457!
458 k_loop : DO k=1,n(ng)
459!
460! Compute A-grid (cell center) components. Apply gradient condition.
461!
462 DO j=jstrr,jendr
463 DO i=istr,iend
464!> Urho(i,j)=0.5_r8*(u(i,j,k,ninp)+u(i+1,j,k,ninp))
465!>
466 tl_urho(i,j)=0.5_r8*(tl_u(i,j,k,ninp)+tl_u(i+1,j,k,ninp))
467 IF (.not.ewperiodic(ng)) THEN
468 IF (domain(ng)%Western_Edge(tile)) THEN
469!> Urho(Istr-1,j)=Urho(Istr,j)
470!>
471 tl_urho(istr-1,j)=tl_urho(istr,j)
472 END IF
473 IF (domain(ng)%Eastern_Edge(tile)) THEN
474!> Urho(Iend+1,j)=Urho(Iend,j)
475!>
476 tl_urho(iend+1,j)=tl_urho(iend,j)
477 END IF
478 END IF
479 END DO
480 END DO
481!
482 DO j=jstr,jend
483 DO i=istrr,iendr
484!> Vrho(i,j)=0.5_r8*(v(i,j,k,ninp)+v(i,j+1,k,ninp))
485!>
486 tl_vrho(i,j)=0.5_r8*(tl_v(i,j,k,ninp)+tl_v(i,j+1,k,ninp))
487 IF (.not.nsperiodic(ng)) THEN
488 IF (domain(ng)%Southern_Edge(tile)) THEN
489!> Vrho(i,Jstr-1) = Vrho(i,Jstr)
490!>
491 tl_vrho(i,jstr-1) = tl_vrho(i,jstr)
492 END IF
493 IF (domain(ng)%Northern_Edge(tile)) THEN
494!> Vrho(i,Jend+1) = Vrho(i,Jend)
495!>
496 tl_vrho(i,jend+1) = tl_vrho(i,jend)
497 END IF
498 END IF
499 END DO
500 END DO
501!
502! Rotate from computational to gegraphical Eastward and Northward
503! directions.
504!
505 DO j=jstrr,jendr
506 DO i=istrr,iendr
507!> ua(i,j,k)=Urho(i,j)*CosAngler(i,j)- &
508!> & Vrho(i,j)*SinAngler(i,j)
509!>
510 tl_ua(i,j,k)=tl_urho(i,j)*cosangler(i,j)- &
511 & tl_vrho(i,j)*sinangler(i,j)
512!> va(i,j,k)=Vrho(i,j)*CosAngler(i,j)+ &
513!> & Urho(i,j)*SinAngler(i,j)
514!>
515 tl_va(i,j,k)=tl_vrho(i,j)*cosangler(i,j)+ &
516 & tl_urho(i,j)*sinangler(i,j)
517# ifdef MASKING
518!> ua(i,j,k)=ua(i,j,k)*rmask(i,j)
519!>
520 tl_ua(i,j,k)=tl_ua(i,j,k)*rmask(i,j)
521!> va(i,j,k)=va(i,j,k)*rmask(i,j)
522!>
523 tl_va(i,j,k)=tl_va(i,j,k)*rmask(i,j)
524# endif
525 END DO
526 END DO
527 END DO k_loop
528
529# ifdef DISTRIBUTE
530!
531! Exchange boundary data.
532!
533!> CALL mp_exchange3d (ng, tile, model, 2, &
534!> & LBi, UBi, LBj, UBj, 1, N(ng), &
535!> & NghostPoints, &
536!> & EWperiodic(ng), NSperiodic(ng), &
537!> & ua, va)
538!>
539 CALL mp_exchange3d (ng, tile, model, 2, &
540 & lbi, ubi, lbj, ubj, 1, n(ng), &
541 & nghostpoints, &
542 & ewperiodic(ng), nsperiodic(ng), &
543 & tl_ua, tl_va)
544# endif
545!
546 RETURN

References mod_param::domain, mod_scalars::ewperiodic, mp_exchange_mod::mp_exchange3d(), mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by tl_uv_c2a_grid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ uv_a2c_grid()

subroutine, public uv_var_change_mod::uv_a2c_grid ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) nout )

Definition at line 225 of file uv_var_change.F.

226!***********************************************************************
227!
228 USE mod_stepping
229!
230! Imported variable declarations.
231!
232 integer, intent(in) :: ng, tile, model, nout
233!
234! Local variable declarations.
235!
236 character (len=*), parameter :: MyFile = &
237 & __FILE__
238!
239# include "tile.h"
240!
241# ifdef PROFILE
242 CALL wclock_on (ng, model, 34, __line__, myfile)
243# endif
244 CALL uv_a2c_grid_tile (ng, tile, model, nout, &
245 & lbi, ubi, lbj, ubj, &
246 & imins, imaxs, jmins, jmaxs, &
247# ifdef MASKING
248 & grid(ng) % umask_full, &
249 & grid(ng) % vmask_full, &
250# endif
251 & grid(ng) % CosAngler, &
252 & grid(ng) % SinAngler, &
253 & ocean(ng) % ua, &
254 & ocean(ng) % va, &
255 & ocean(ng) % u, &
256 & ocean(ng) % v)
257# ifdef PROFILE
258 CALL wclock_off (ng, model, 34, __line__, myfile)
259# endif
260!
261 RETURN

References mod_grid::grid, mod_ocean::ocean, uv_a2c_grid_tile(), wclock_off(), and wclock_on().

Here is the call graph for this function:

◆ uv_a2c_grid_tile()

subroutine uv_var_change_mod::uv_a2c_grid_tile ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) nout,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
integer, intent(in) imins,
integer, intent(in) imaxs,
integer, intent(in) jmins,
integer, intent(in) jmaxs,
real(r8), dimension(lbi:,lbj:), intent(in) umask,
real(r8), dimension(lbi:,lbj:), intent(in) vmask,
real(r8), dimension(lbi:,lbj:), intent(in) cosangler,
real(r8), dimension(lbi:,lbj:), intent(in) sinangler,
real(r8), dimension(lbi:,lbj:,:), intent(in) ua,
real(r8), dimension(lbi:,lbj:,:), intent(in) va,
real(r8), dimension(lbi:,lbj:,:,:), intent(inout) u,
real(r8), dimension(lbi:,lbj:,:,:), intent(inout) v )
private

Definition at line 265 of file uv_var_change.F.

273!***********************************************************************
274!
275! Imported variable declarations.
276!
277 integer, intent(in) :: ng, tile, model, nout
278 integer, intent(in) :: LBi, UBi, LBj, UBj
279 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
280!
281# ifdef ASSUMED_SHAPE
282 real(r8), intent(in) :: CosAngler(LBi:,LBj:)
283 real(r8), intent(in) :: SinAngler(LBi:,LBj:)
284# ifdef MASKING
285 real(r8), intent(in) :: umask(LBi:,LBj:)
286 real(r8), intent(in) :: vmask(LBi:,LBj:)
287# endif
288 real(r8), intent(in) :: ua(LBi:,LBj:,:)
289 real(r8), intent(in) :: va(LBi:,LBj:,:)
290
291 real(r8), intent(inout) :: u(LBi:,LBj:,:,:)
292 real(r8), intent(inout) :: v(LBi:,LBj:,:,:)
293# else
294 real(r8), intent(in) :: CosAngler(LBi:UBi,LBj:UBj)
295 real(r8), intent(in) :: SinAngler(LBi:UBi,LBj:UBj)
296# ifdef MASKING
297 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
298 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
299# endif
300 real(r8), intent(in) :: ua(LBi:UBi,LBj:UBj,N(ng))
301 real(r8), intent(in) :: va(LBi:UBi,LBj:UBj,N(ng))
302
303 real(r8), intent(inout) :: u(LBi:UBi,LBj:UBj,N(ng),2)
304 real(r8), intent(inout) :: v(LBi:UBi,LBj:UBj,N(ng),2)
305# endif
306!
307! Local variable declarations.
308!
309 integer :: i, j, k
310!
311 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Urho, Vrho
312
313# include "set_bounds.h"
314!
315!-----------------------------------------------------------------------
316! Transform vector components from A-grid to C-grid.
317!-----------------------------------------------------------------------
318!
319 k_loop : DO k=1,n(ng)
320!
321! Rotate vector components to computational (XI,ETA) directions.
322!
323 DO j=jstr-1,jendr
324 DO i=istr-1,iendr
325 urho(i,j)=ua(i,j,k)*cosangler(i,j)+ &
326 & va(i,j,k)*sinangler(i,j)
327 vrho(i,j)=va(i,j,k)*cosangler(i,j)- &
328 & ua(i,j,k)*sinangler(i,j)
329 END DO
330 END DO
331!
332! Compute staggered C-grid components.
333!
334 DO j=jstrr,jendr
335 DO i=istr,istrr
336 u(i,j,k,nout)=0.5_r8*(urho(i-1,j)+urho(i,j))
337# ifdef MASKING
338 u(i,j,k,nout)=u(i,j,k,nout)*umask(i,j)
339# endif
340 END DO
341 END DO
342 DO j=jstr,jendr
343 DO i=istrr,iendr
344 v(i,j,k,nout)=0.5_r8*(vrho(i,j-1)+vrho(i,j))
345# ifdef MASKING
346 v(i,j,k,nout)=v(i,j,k,nout)*vmask(i,j)
347# endif
348 END DO
349 END DO
350 END DO k_loop
351
352# ifdef DISTRIBUTE
353!
354! Exchange boundary data.
355!
356 CALL mp_exchange3d (ng, tile, model, 2, &
357 & lbi, ubi, lbj, ubj, 1, n(ng), &
358 & nghostpoints, &
359 & ewperiodic(ng), nsperiodic(ng), &
360 & u(:,:,:,nout), v(:,:,:,nout))
361# endif
362!
363 RETURN

References mod_scalars::ewperiodic, mp_exchange_mod::mp_exchange3d(), mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by uv_a2c_grid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ uv_c2a_grid()

subroutine, public uv_var_change_mod::uv_c2a_grid ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) ninp )

Definition at line 74 of file uv_var_change.F.

75!***********************************************************************
76!
77! Imported variable declarations.
78!
79 integer, intent(in) :: ng, tile, model, ninp
80!
81! Local variable declarations.
82!
83 character (len=*), parameter :: MyFile = &
84 & __FILE__
85!
86# include "tile.h"
87!
88# ifdef PROFILE
89 CALL wclock_on (ng, model, 34, __line__, myfile)
90# endif
91 CALL uv_c2a_grid_tile (ng, tile, model, ninp, &
92 & lbi, ubi, lbj, ubj, &
93 & imins, imaxs, jmins, jmaxs, &
94# ifdef MASKING
95 & grid(ng) % rmask_full, &
96# endif
97 & grid(ng) % CosAngler, &
98 & grid(ng) % SinAngler, &
99 & ocean(ng) % u, &
100 & ocean(ng) % v, &
101 & ocean(ng) % ua, &
102 & ocean(ng) % va)
103# ifdef PROFILE
104 CALL wclock_off (ng, model, 34, __line__, myfile)
105# endif
106!
107 RETURN

References mod_grid::grid, mod_ocean::ocean, uv_c2a_grid_tile(), wclock_off(), and wclock_on().

Referenced by step3d_uv_mod::step3d_uv_tile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ uv_c2a_grid_tile()

subroutine uv_var_change_mod::uv_c2a_grid_tile ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) model,
integer, intent(in) ninp,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
integer, intent(in) imins,
integer, intent(in) imaxs,
integer, intent(in) jmins,
integer, intent(in) jmaxs,
real(r8), dimension(lbi:,lbj:), intent(in) rmask,
real(r8), dimension(lbi:,lbj:), intent(in) cosangler,
real(r8), dimension(lbi:,lbj:), intent(in) sinangler,
real(r8), dimension(lbi:,lbj:,:,:), intent(in) u,
real(r8), dimension(lbi:,lbj:,:,:), intent(in) v,
real(r8), dimension(lbi:,lbj:,:), intent(inout) ua,
real(r8), dimension(lbi:,lbj:,:), intent(inout) va )
private

Definition at line 111 of file uv_var_change.F.

119!***********************************************************************
120!
121! Imported variable declarations.
122!
123 integer, intent(in) :: ng, tile, model, ninp
124 integer, intent(in) :: LBi, UBi, LBj, UBj
125 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
126!
127# ifdef ASSUMED_SHAPE
128 real(r8), intent(in) :: CosAngler(LBi:,LBj:)
129 real(r8), intent(in) :: SinAngler(LBi:,LBj:)
130# ifdef MASKING
131 real(r8), intent(in) :: rmask(LBi:,LBj:)
132# endif
133 real(r8), intent(in) :: u(LBi:,LBj:,:,:)
134 real(r8), intent(in) :: v(LBi:,LBj:,:,:)
135
136 real(r8), intent(inout) :: ua(LBi:,LBj:,:)
137 real(r8), intent(inout) :: va(LBi:,LBj:,:)
138# else
139 real(r8), intent(in) :: CosAngler(LBi:UBi,LBj:UBj)
140 real(r8), intent(in) :: SinAngler(LBi:UBi,LBj:UBj)
141# ifdef MASKING
142 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
143# endif
144 real(r8), intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
145 real(r8), intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
146
147 real(r8), intent(inout) :: ua(LBi:UBi,LBj:UBj,N(ng))
148 real(r8), intent(inout) :: va(LBi:UBi,LBj:UBj,N(ng))
149# endif
150!
151! Local variable declarations.
152!
153 integer :: i, j, k
154
155 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Urho, Vrho
156
157# include "set_bounds.h"
158!
159!-----------------------------------------------------------------------
160! Tranform vector components from C-grid to A-grid.
161!-----------------------------------------------------------------------
162!
163 k_loop : DO k=1,n(ng)
164!
165! Compute A-grid (cell center) components. Apply gradient condition.
166!
167 DO j=jstrr,jendr
168 DO i=istr,iend
169 urho(i,j)=0.5_r8*(u(i,j,k,ninp)+u(i+1,j,k,ninp))
170 IF (.not.ewperiodic(ng)) THEN
171 IF (domain(ng)%Western_Edge(tile)) THEN
172 urho(istr-1,j)=urho(istr,j)
173 END IF
174 IF (domain(ng)%Eastern_Edge(tile)) THEN
175 urho(iend+1,j)=urho(iend,j)
176 END IF
177 END IF
178 END DO
179 END DO
180!
181 DO j=jstr,jend
182 DO i=istrr,iendr
183 vrho(i,j)=0.5_r8*(v(i,j,k,ninp)+v(i,j+1,k,ninp))
184 IF (.not.nsperiodic(ng)) THEN
185 IF (domain(ng)%Southern_Edge(tile)) THEN
186 vrho(i,jstr-1) = vrho(i,jstr)
187 END IF
188 IF (domain(ng)%Northern_Edge(tile)) THEN
189 vrho(i,jend+1) = vrho(i,jend)
190 END IF
191 END IF
192 END DO
193 END DO
194!
195! Rotate from computational to gegraphical Eastward and Northward
196! directions.
197!
198 DO j=jstrr,jendr
199 DO i=istrr,iendr
200 ua(i,j,k)=urho(i,j)*cosangler(i,j)- &
201 & vrho(i,j)*sinangler(i,j)
202 va(i,j,k)=vrho(i,j)*cosangler(i,j)+ &
203 & urho(i,j)*sinangler(i,j)
204# ifdef MASKING
205 ua(i,j,k)=ua(i,j,k)*rmask(i,j)
206 va(i,j,k)=va(i,j,k)*rmask(i,j)
207# endif
208 END DO
209 END DO
210 END DO k_loop
211
212# ifdef DISTRIBUTE
213!
214 CALL mp_exchange3d (ng, tile, model, 2, &
215 & lbi, ubi, lbj, ubj, 1, n(ng), &
216 & nghostpoints, &
217 & ewperiodic(ng), nsperiodic(ng), &
218 & ua, va)
219# endif
220!
221 RETURN

References mod_param::domain, mod_scalars::ewperiodic, mp_exchange_mod::mp_exchange3d(), mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by uv_c2a_grid().

Here is the call graph for this function:
Here is the caller graph for this function: