あなたは単に書くことができます
SUBROUTINE set(an_int)
integer, intent(inout) :: an_int
an_int = 5
END SUBROUTINE set
そして、次のようにサブルーチンを呼び出します。
CALL set(myObj%var)
コンポーネントを派生型にパッケージ化し、それらをアンパックしてプロシージャに渡すのはひねくれているという私の意見は単なる意見であり、無視してかまいません。個人的には、次のようなコードのより根本的な書き直しを行います。ただし、これは 2003 標準で導入されたいくつかの機能を使用していることに注意してください。ただし、これらは最も広く使用されているコンパイラの現在のエディションで実装されています。
MODULE mytype
IMPLICIT NONE
TYPE obj
INTEGER, PRIVATE :: var
CONTAINS
PROCEDURE, PASS :: get_var
PROCEDURE, PASS :: set_var
END TYPE obj
CONTAINS
SUBROUTINE set_var(this,an_int)
CLASS(obj), INTENT(inout) :: this
INTEGER, INTENT(in) :: an_int
this%var = an_int
END SUBROUTINE set_var
INTEGER FUNCTION get_var(this)
CLASS(obj), INTENT(inout) :: this
get_var = this%var
END FUNCTION get_var
END MODULE mytype
PROGRAM test
USE mytype
IMPLICIT NONE
TYPE (obj) :: myObj
CALL myobj%set_var(12)
PRINT*, myObj%get_var()
END PROGRAM test