{"id":786,"date":"2020-02-06T18:16:26","date_gmt":"2020-02-06T22:16:26","guid":{"rendered":"https:\/\/www2.whoi.edu\/site\/aomip\/?page_id=786"},"modified":"2021-06-18T09:27:21","modified_gmt":"2021-06-18T13:27:21","slug":"vector-rotation-fortran-code","status":"publish","type":"page","link":"https:\/\/www2.whoi.edu\/site\/aomip\/models\/vector-rotation-fortran-code\/","title":{"rendered":"Vector Rotation &#8211; Fortran Code"},"content":{"rendered":"\n\n\t<h1>Vector Rotation &#8211; Fortran Code<\/h1>\nSUBROUTINE C_FIELD_GEO_TO_MODEL (FIELD_X,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FIELD_Y)\n!&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n! purpose: rotate a 2-d vector field from geographic to model coordinates<br \/>\n!\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 accounting for fact that vectors change orientation<br \/>\n!&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n!<br \/>\n! algorithm : project geographic long\/lat components onto<br \/>\n!\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 geographic cartesian x\/y\/z components, then<br \/>\n!\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 perform euler angle rotation about three axes obtaining<br \/>\n!\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 model cartesian x&#8221;&#8217;\/y&#8221;&#8217;\/z&#8221;&#8217; components, then<br \/>\n!\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 project model cartesian componets onto<br \/>\n!\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 model long\/lat componets (sorry!)<br \/>\n!<br \/>\n! input :<br \/>\n!<br \/>\n! FIELD_X : x field on model grid but with geographic directions<br \/>\n! FIELD_Y : y field on model grid but with geographic directions<br \/>\n!<br \/>\n! output :<br \/>\n!<br \/>\n! FIELD_X : x field on model grid but with model directions<br \/>\n! FIELD_Y : y field on model grid but with model directions<br \/>\n!<br \/>\n!&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\n!passed arguments<br \/>\nREAL (TYPE_REAL_8),<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 INTENT (INOUT) ::<br \/>\n&amp;<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 FIELD_X (C_NXL:C_NXH, C_NYL:C_NYH),<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 FIELD_Y (C_NXL:C_NXH, C_NYL:C_NYH)\n!local vars<br \/>\nREAL (TYPE_REAL_8) ::<br \/>\n&amp;<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 LON_GEO,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 LAT_GEO,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 LON_MOD,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 LAT_MOD,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 X_GEO,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 Y_GEO,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 Z_GEO,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 X_MOD,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 Y_MOD,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0 Z_MOD\n<p>!&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n!perform at one horizontal grid point at a time<br \/>\nDO J = C_NYL, C_NYH<br \/>\nDO I = C_NXL, C_NXH\n!the present vector position in model lat\/long coords.<br \/>\nLON_MOD = C_X (I)<br \/>\nLAT_MOD = C_Y (J)\n!the present vector position in geogr. lat\/long coords.<br \/>\nCALL C_MODEL_TO_GEO (LON_MOD,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LAT_MOD,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LON_GEO,<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LAT_GEO)\n!convert geogr. long\/lat into geogr. cartesian<br \/>\nX_GEO =-FIELD_X (I,J) * C_SIND (LON_GEO) &#8211;<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FIELD_Y (I,J) * C_COSD (LON_GEO) * C_SIND (LAT_GEO)<br \/>\nY_GEO = FIELD_X (I,J) * C_COSD (LON_GEO) &#8211;<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FIELD_Y (I,J) * C_SIND (LON_GEO) * C_SIND (LAT_GEO)<br \/>\nZ_GEO = FIELD_Y (I,J) * C_COSD (LAT_GEO)\n!rotate geogr. cartesian into model cartesian<br \/>\nX_MOD = C_REVERSE (1,1) * X_GEO<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 + C_REVERSE (1,2) * Y_GEO<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 + C_REVERSE (1,3) * Z_GEO<br \/>\nY_MOD = C_REVERSE (2,1) * X_GEO<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 + C_REVERSE (2,2) * Y_GEO<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 + C_REVERSE (2,3) * Z_GEO<br \/>\nZ_MOD = C_REVERSE (3,1) * X_GEO<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 + C_REVERSE (3,2) * Y_GEO<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 + C_REVERSE (3,3) * Z_GEO\n!convert model cartesian into model long\/lat<br \/>\nFIELD_X (I,J) =-X_MOD * C_SIND (LON_MOD)<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 + Y_MOD * C_COSD (LON_MOD)\nFIELD_Y (I,J) =-X_MOD * C_COSD (LON_MOD) * C_SIND (LAT_MOD)<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8211; Y_MOD * C_SIND (LON_MOD) * C_SIND (LAT_MOD)<br \/>\n&amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 + Z_MOD * C_COSD (LAT_MOD)\nENDDO<br \/>\nENDDO\n<p>!&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>END SUBROUTINE C_FIELD_GEO_TO_MODEL<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Vector Rotation &#8211; Fortran Code SUBROUTINE C_FIELD_GEO_TO_MODEL (FIELD_X, &amp;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 FIELD_Y) !&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; ! purpose: rotate a 2-d vector field from geographic to model coordinates !\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 accounting for fact that vectors change orientation !&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; ! ! algorithm : project geographic long\/lat components onto !\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 geographic cartesian x\/y\/z components, then !\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 perform euler angle rotation about three axes&hellip;<\/p>\n","protected":false},"author":83,"featured_media":0,"parent":628,"menu_order":5,"comment_status":"closed","ping_status":"closed","template":"tpl-sidebar.php","meta":{"advanced-sidebar-menu\/link-title":"","advanced-sidebar-menu\/exclude-page":false},"_links":{"self":[{"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/pages\/786"}],"collection":[{"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/users\/83"}],"replies":[{"embeddable":true,"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/comments?post=786"}],"version-history":[{"count":3,"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/pages\/786\/revisions"}],"predecessor-version":[{"id":1688,"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/pages\/786\/revisions\/1688"}],"up":[{"embeddable":true,"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/pages\/628"}],"wp:attachment":[{"href":"https:\/\/www2.whoi.edu\/site\/aomip\/wp-json\/wp\/v2\/media?parent=786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}