2014-07-16 2 views
5

의학적 맥락에서 Modelica 모델에서 비 SI 단위를 사용하고 싶습니다. 나는 Dymola에서 Modelica를 사용하고 있습니다. 엔지니어이기 때문에 저는 SI 단위를 선호합니다. 그러나 필자의 모델 매개 변수는 의학 서적에서 유래되었으며 변환 실수를 피하고자한다. 의료기관은 또한 의사와의 의사 소통을 단순화합니다.교수법 Modelica 의학 비 SI 단위

예를 들어 압력을 "Pa"대신 "mmHg"(수은 밀리미터) 단위가 사용됩니다. 다음과 같이 압력 변수는 모델에 정의되어 시뮬레이션 모델을 번역

type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg") 

모델의 모든 단일 비 SI 변수에 대한 다음과 같은 경고를 산출 (~ 총 300 경고) :

Could not decode the unit symbol "mmHg" appearing in the unit string "mmHg" 

모델을 변경하면 새로운 경고가 발생하여 거의 감지 할 수 없습니다. 그러므로 Modelica에게 "mmHg"단위를 가르쳐야합니다.

주제에 내 현재의 지식 :
- Modelica 언어 사양 3.3, 19 장 단위 식 : ". 그것은 사용자 정의 단위 기호를 지원하는 것이 가능하다" 그러나이 문서에서는 이에 대해 자세히 설명하지 않습니다.
는 - 시뮬레이션 GUI에서 사용하기 위해 (실제 속성 "displayUnit") 표시 단위를 정의 할 수 있습니다 사용자는 한 환산 계수가 Dymola 디렉토리에있는 "displayunit.mos"파일에 정의 된대로 다음과 같이

defineUnitConversion("Pa", "mmHg", 760/101325); 

이 옵션은 모델의 이식성을 떨어 뜨리기 때문에 선택 사항이 아닙니다. 모델을 실행하고 관리자 권한이 필요한 모든 컴퓨터에서 수동으로 수행해야합니다 (필자는 필요 없음).

미리 도움 주셔서 감사합니다. Modelica 표준 라이브러리 3.2, Dymola 버전 2014 (64 비트) 2013년 3월 25일

: 게시 시간에
버전 :

편집는 (앞으로이 건너 오는 사람에게 도움이 될 수 있음)

주제에 대한 현재 지식에 다음을 추가하는 것을 잊었습니다 : Physiolibrary 2.1.1은 GUI 용 displayUnits를 정의합니다. 코딩에서, 저자는 다음 요령을 사용

type Pressure = Modelica.SIunits.Pressure(displayUnit="mmHg", nominal=133.322387415); 

Modelica 주어진 공칭하여 코드 입력의 모든 값을 단위 파스칼 (N/m2)를 갖는 것으로 형 압력 변수를 처리하지만, 분할이 방법.

교정 :이 섹션에서는
, 나는 이전에 Physiolibrary 단위 변환을위한 실제 속성 명목을 사용 밝혔다. 그렇지 않다. 저를 시정 해 주신 Marek Matejak (Physiolibrary의 저자)에게 감사드립니다. 공칭 속성의 유일한 목적은 안정성상의 이유로 수치 문제를 조정하는 것입니다.

+1

정말 답이 없지만 [Modelica Trac 사이트] (https://trac.modelica.org/Modelica/ticket/1024)에서 관련 토론을 찾을 수 있습니다. –

+1

@MichaelTiller : 이것은 매우 도움이되며 내 질문에 대한 답변을 제공합니다. 관련 논의에 따르면 사용자 정의 단위와 SI 기본 단위 간의 관계를 정의하는 것은 불가능한 것처럼 보입니다. 적어도 나는 존재하지 않는 해결책을 찾기 위해 인터넷 검색을 멈출 수 있다는 것을 알았다. :) 고마워요! –

답변

2

@Jay_At_Play @ @MichaelTiller가 공유하는 the Modelica Trac site을 다시 살펴볼 수 있습니다. 방금 도움이 될만한 방법에 대해 설명했습니다. 그러나 경고로서, 비표준이며 Modelica 표준 라이브러리와 직접 호환되지 않습니다. Dymola에서

(. 나는 원래의 질문에서 의견이 추가 싶었지만, 나는 명성 포인트가없는)

+0

업데이트 해 주셔서 감사합니다. 매우 감사드립니다. 나는 당신의 접근법을 좋아한다 : 그것은 미래의 구현을위한 선택이다. 평판 포인트가 부족하여 대답을 유용하다고 표시 할 수 없습니다. 늦게 회신하여 죄송합니다. 최근에 시험 준비에 바빴습니다. –

+0

오늘 FCSys 패키지를 다운로드하여 유닛 구현을 자세하게 살펴보고 "직접 호환되지 않음"이라는 의미를 발견했습니다. Dymola에서 모델 검사를 수행하면 "누락 된 기본 클래스 Modelica.Icons.TypesPackage"오류가 발생합니다. MSL의 확장을 나타내는 "확장"행을 삭제할 수 있습니까? 누락 된 패키지가 올바른 단위 구현을위한 요구 사항이라면, 저에게 사본을 보내 주시겠습니까? 도와 주셔서 다시 한 번 감사드립니다!나는 당신의 클린 유닛 구현이 국제 표준에 기반하고 있다는 것을 정말로 좋아한다. :) –

+0

... 또한 FCSys.Quantities에 대한 당신의 문서에서 "단위 검사 방법이 수립되었다. [Mattsson2008, Broman2008, Aronsson2009]가 적용될 수있다. 대신 치수 검사를 할 수 있습니다. " "이론적으로"당신은 무엇을 의미합니까? Adrian Pop에서 설명한대로 단위 검사가 비활성화 되었습니까? 아니면 Dymola의 단위 검사가 치수 검사로 작동합니까? –

3

제가 아는 한, 휴대용 방식으로 이것을 수행하는 좋은 방법은 없습니다.

Modelica 사양은 사용자 정의 단위를 처리하는 방법을 말하지 않으므로 각 도구는 각자의 방식대로 처리합니다.

내가 생각하는 가장 좋은 방법은 일부 도구에서 경고가있는 경우에도 모델 또는 라이브러리에서 유형을 정의한 것처럼 수행하는 것입니다. 명령 창에서

Advanced.CheckUnits = false 

: 당신을 통해 경고를 제거 할 수 Dymola에서

.

3

Modelica 의료 비 SI (디스플레이) 단위 :

    ": \ 프로그램 파일 * \ Dymola는 * \ \ displayunit.mos를 삽입 C"매개 변수의 같은 https://github.com/MarekMatejak/Physiolibrary/blob/master/Physiolibrary/Resources/DisplayUnits/displayunit.mos

  1. 정의 또는

  2. 는 단위가 Dymola이 파일을 확장하려고 의료 비 SI (디스플레이)에 대한 suport을 가지고 변수는 항상 속성 단위를 설정해야합니다. 예를 들어

:

매개 변수 리얼 systolicPressure (최종 단위 = "아빠", displayUnit = "mmHg의 SI 단위와 displayUnit이 Dymola 파일"displayunit.mos "에 변환을 정의한 것을 다 할 수 있습니다에 ") = 16000;

매개 변수 Real diastolicPressure (최종 단위 = "Pa", displayUnit = "torr") = 10000;

Modelica는 항상 SI 단위로 모델을 계산하지만 Dymola의 매개 변수 대화 상자와 출력 플롯은 표시 단위로 표시됩니다. 주의해야합니다. 텍스트 코드의 모든 값은 SI 단위 여야합니다.

수식은 변환과 직접 연결되지 않습니다. 수치 수학 수학의 상대 허용 오차에만 사용됩니다.

Physiolibrary 디스플레이 단위에서 실수를 발견하면 주저하지 말고보고하십시오. 고맙습니다!

+0

내 실수를 고쳐 주셔서 감사합니다! –